首页 文章

如何使用Automapper进行统一依赖注入?

提问于
浏览
6

我计划将Automapper与ASP.NET MVC解决方案和Unity DI一起使用 . 在automapper上发布的关于如何使用的视频非常陈旧,并没有显示映射器如何与依赖注入一起使用 . stackoverflow上的大多数示例也使用Mapper.CreateMap()方法,现在不推荐使用它 .

自动化指南说

获得类型后,可以使用MapperConfiguration实例和CreateMap为这两种类型创建 Map . 通常每个AppDomain只需要一个MapperConfiguration实例,并且应该在启动期间实例化 .

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

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

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

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

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

1 回答

  • 12

    首先,创建一个 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框架正确设置容器,控制器应该可以构造而不会出现问题 .

相关问题