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

asp.net-mvc – 如何使用统一依赖注入的Automapper?

发布时间:2020-12-15 19:03:40 所属栏目:asp.Net 来源:网络整理
导读:我计划将Automapper与ASP.NET MVC解决方案和Unity DI一起使用.在 automapper上发布的关于如何使用的视频非常陈旧,并没有显示映射器如何与依赖注入一起使用. stackoverflow上的大多数示例也使用Mapper.CreateMap()方法,现在不推荐使用它. 自动化指南说 Once y
我计划将Automapper与ASP.NET MVC解决方案和Unity DI一起使用.在 automapper上发布的关于如何使用的视频非常陈旧,并没有显示映射器如何与依赖注入一起使用. stackoverflow上的大多数示例也使用Mapper.CreateMap()方法,现在不推荐使用它.

自动化指南说

Once you have your types you can create a map for the two types using
a MapperConfiguration instance and CreateMap. You only need one
MapperConfiguration instance typically per AppDomain and should be
instantiated during startup.

var config = new MapperConfiguration(cfg => cfg.CreateMap<Order,OrderDto>());

所以我假设上面的代码行将进入应用程序启动,如global.asax

要执行映射,请使用CreateMapper方法创建IMapper.

var mapper = config.CreateMapper();
 OrderDto dto = mapper.Map<OrderDto>(order);

以上行将进入控制器.但是我不明白这个配置变量来自哪里?我如何在控制器中注入IMapper?

解决方法

首先,创建一个MapperConfiguration,并从中创建一个IMapper,它具有如下所有类型的配置:
var config = new MapperConfiguration(cfg =>
{
    //Create all maps here
    cfg.CreateMap<Order,OrderDto>();

    cfg.CreateMap<MyHappyEntity,MyHappyEntityDto>();

    //...
});

IMapper mapper = config.CreateMapper();

然后,使用统一容器注册映射器实例,如下所示:

container.RegisterInstance(mapper);

然后,任何希望使用映射器的控制器(或服务)都可以在构造函数中声明这样的依赖关系,如下所示:

public class MyHappyController
{
    private readonly IMapper mapper;

    public MyHappyController(IMapper mapper)
    {
        this.mapper = mapper;
    }

    //Use the mapper field in your methods
}

假设您使用MVC框架正确设置容器,控制器应该可以构造而不会出现问题.

(编辑:李大同)

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

    推荐文章
      热点阅读