Asp.net-Mvc

如何將 Automapper 與統一依賴注入一起使用?

  • May 5, 2016

我計劃將 Automapper 與 ASP.NET MVC 解決方案和 Unity DI 一起使用。在automapper上發布的有關如何使用的影片非常古老,並且沒有顯示如何將 mapper 與依賴注入一起使用。stackoverflow 上的大多數範例也使用 Mapper.CreateMap() 方法,該方法現已棄用。

自動映射器指南說

一旦你有了你的類型,你就可以使用 MapperConfiguration 實例和 CreateMap 為這兩種類型創建一個映射。通常每個 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?

首先,創建一個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 框架正確設置了容器,那麼控制器應該可以毫無問題地建構。

引用自:https://stackoverflow.com/questions/37038111