我为
Automapper发现的大多数示例使用静态Mapper对象来管理类型映射.对于我的项目,我需要使用StructureMap注入一个IMapperEngine作为对象构造的一部分,以便我们可以在单元测试中模拟映射器,所以我们不能使用静态映射器.我还需要支持配置AutoMapper配置文件.
我的问题是如何配置StructureMap注册表,以便在构建MyService实例时可以提供一个IMappingEngine的实例.
这是服务构造函数签名:
- public MyService(IMappingEngine mapper,IMyRepository myRepository,ILogger logger)
而这里是StructureMap Registry
- public class MyRegistry : StructureMap.Configuration.DSL.Registry
- {
- public MyRegistry()
- {
- For<IMyRepository>().Use<MyRepository>();
- For<ILogger>().Use<Logger>();
- //what to do for IMappingEngine?
- }
- }
和我想加载的配置文件
- public class MyAutoMapperProfile : AutoMapper.Profile
- {
- protected override void Configure()
- {
- this.CreateMap<MyModel,MyDTO>();
- }
- }
Mapper类具有静态属性Mapper.Engine.使用此方法将引擎注册到容器中:
- For<IMappingEngine>().Use(() => Mapper.Engine);
如果您需要在注册引擎之前加载您的配置文件,那么我将在上面的代码段中插入该配置代码.
更新
- class MyRegistry : Registry
- {
- public MyRegistry()
- {
- For<IMyRepository>().Use<MyRepository>();
- For<ILogger>().Use<Logger>();
- Mapper.AddProfile(new AutoMapperProfile());
- For<IMappingEngine>().Use(() => Mapper.Engine);
- }
- }
此代码在您的引导程序中运行一次,并且随后将使用使用自定义AutoMapperProfile配置的静态属性Mapper.Engine的值提供类型为IMappingEngine的任何依赖关系.