加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖注入 – 如何使用StructureMap注入AutoMapper IMappingEngin

发布时间:2020-12-14 00:49:15 所属栏目:百科 来源:网络整理
导读:我为 Automapper发现的大多数示例使用静态Mapper对象来管理类型映射.对于我的项目,我需要使用StructureMap注入一个IMapperEngine作为对象构造的一部分,以便我们可以在单元测试中模拟映射器,所以我们不能使用静态映射器.我还需要支持配置AutoMapper配置文件.
我为 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的任何依赖关系.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读