00.AutoMapper 之入門指南(Getting Started Guide)

入門指南(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();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 Mybatis入門 1.1 單獨(dú)使用jdbc編程問題總結(jié) 1.1.1 jdbc程序 上邊使...
    哇哈哈E閱讀 3,415評(píng)論 0 38
  • 1. 簡介 本文檔包含DPDK軟件安裝和配置的相關(guān)說明。旨在幫助用戶快速啟動(dòng)和運(yùn)行軟件。文檔主要描述了在Linux...
    半天妖閱讀 18,116評(píng)論 0 22
  • 那年十六,摘下這句話。 筆觸走過的地方,而今看來略顯稚嫩,細(xì)辨之下,一股懵懂卻呼之欲出的憤懣,似宣泄著對(duì)這個(gè)世界的...
    青空之下_閱讀 190評(píng)論 0 0
  • 上個(gè)世紀(jì)七八十年代的家鄉(xiāng)小城,寧靜而又平和,一年四季都按照屬于自己的節(jié)氣,和緩地、層次分明地日月輪回,春秋不短暫,...
    郁舒閱讀 800評(píng)論 2 5

友情鏈接更多精彩內(nèi)容