入門指南(Getting Started Guide)
AutoMapper 是什么?
AutoMapper 是一個(gè)對(duì)象映射器。對(duì)象映射器的原理是將輸入對(duì)象轉(zhuǎn)換為另一種類型的輸出對(duì)象。
AutoMapper 提供了各種約定將你的手指從重復(fù)無趣的類型A與類型B的映射中解脫出來。只要B類型遵循AutoMapper 的約定,無需任何配置就可以完成A類型與B類型的映射。
為什么使用AutoMapper?
因?yàn)閷懹成浯a很無聊。測(cè)試映射代碼更無聊。AutoMapper 提供簡單的類型配置與映射測(cè)試。這個(gè)問題本質(zhì)可能是“為什么要使用對(duì)象映射器?”,映射發(fā)生在應(yīng)用程序中各個(gè)位置,但最多還是發(fā)生在層與層之間。如Ui層/Domain層或者Service層/Domain層。
一個(gè)層的關(guān)注點(diǎn)經(jīng)常與另一層的關(guān)注點(diǎn)不同,所以對(duì)象映射可以使得各個(gè)層之間的模型隔離。
如何使用AutoMapper?
首先,需要準(zhǔn)備源類型和目標(biāo)類型兩種不同的類型。目標(biāo)類型的設(shè)計(jì)可能受其所在層的影響,但只要成員的名稱與源類型的成員名稱匹配,AutoMapper的就能達(dá)到最佳效果。如果源類型有一個(gè)成員叫“FirstName”,將自動(dòng)與目標(biāo)類型中的“FirstName”映射。AutoMapper 也支持扁平化映射。
AutoMapper 從源類型映射到目標(biāo)類型時(shí)默認(rèn)忽略空引用異常。如果你不喜歡這種方式,可以根據(jù)需要將AutoMapper 的方法與自定義值解析器結(jié)合使用。
你可以使用MapperConfiguration或者 Mapper靜態(tài)實(shí)例創(chuàng)建映射。MapperConfiguration一般為全局實(shí)例,在應(yīng)用程序啟動(dòng)時(shí)實(shí)例化。另外,你也可以使用Mapper.Initialize。
Mapper.Initialize(cfg => cfg.CreateMap<Order, OrderDto>());
//或者
var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());
左側(cè)為源類型右側(cè)為目標(biāo)類型。使用靜態(tài)或者實(shí)例Mapper對(duì)象的方法執(zhí)行映射。
//使用實(shí)例的方式實(shí)例化Mapper對(duì)象
var mapper = config.CreateMapper();
//或者
var mapper = new Mapper(config);
OrderDto dto = mapper.Map<OrderDto>(order);
// 或者使用靜態(tài)Mapper對(duì)象
OrderDto dto = Mapper.Map<OrderDto>(order);
大多數(shù)應(yīng)用程序可以使用依賴注入來注入創(chuàng)建的IMapper實(shí)例。
對(duì)于那些在編譯時(shí)可能不知道類型的情況,AutoMapper還具有這些方法的非泛型版本。
在哪里配置AutoMapper?
如果您使用靜態(tài)Mapper方法,則每個(gè)程序域只應(yīng)進(jìn)行一次配置。這意味著放置配置代碼的最佳位置是應(yīng)用程序啟動(dòng)時(shí),例如ASP.NET應(yīng)用程序的Global.asax文件。通常,配置引導(dǎo)程序類在其自己的類中,并且從啟動(dòng)方法調(diào)用此引導(dǎo)程序類。 引導(dǎo)程序類應(yīng)調(diào)用Mapper.Initialize來配置類型映射。
怎么測(cè)試映射?
要測(cè)試映射,您需要?jiǎng)?chuàng)建一個(gè)執(zhí)行以下兩項(xiàng)操作的測(cè)試:
- 調(diào)用你的引導(dǎo)程序類創(chuàng)建映射
- 調(diào)用
MapperConfiguration.AssertConfigurationIsValid
這是一個(gè)例子:
var config = AutoMapperConfiguration.Configure();
config.AssertConfigurationIsValid();