什么是AutoMapper?
AutoMapper是一個對象和對象間的映射器。對象與對象的映射是通過轉變一種類型的輸入對象為一種不同類型的輸出對象工作的。讓AutoMapper有意思的地方在於它提供了一些將類型A映射到類型B這種無聊的事情的有趣慣例。只要類型B遵守AutoMapper已經建立的慣例,大多數情況下,映射兩種類型零配置就可以了。
為什么使用AutoMapper?
映射代碼是無聊的。測試映射代碼更無聊。AutoMapper提供了一些簡單配置,還有一些簡單的映射測試。真正的問題可能是“為什么使用對象-對象的映射呢”?映射可能發生在一個應用的許多地方,但大多數情況下都發生在層與層之間的邊界,比如UI/Domain層之間,或者Service/Domain層之間。關注一層通常和關注另一層發生沖突,因此對象-對象間的映射來隔離模型model,這樣就只會影響每一層關注的類型。
如何使用AutoMapper?
首先,需要有source(源)和destination(目標)類型。目標類型的設計可能會受它所在的層影響,但是只要目標類型的成員的名字匹配源類型的成員,那么AutoMapper就能很好地工作。比如,如果有一個源類型的成員叫“FirstName“,那么就會自動地映射到名為”FirstName“的目標成員。AutoMapper也支持Flattening(扁平化)。
當映射源到目標時,AutoMapper會忽略空引用異常。這是故意設計的。如果你不喜歡這樣子,你可以把AutoMapper和需要的Custom-value-resolvers結合起來使用以達到目的。
只要有了類型和一個AutoMapper的引用,你就可以創建這兩個類型的映射。
Mapper.CreateMap<Order,OrderDto>();
左邊的類型是源類型,右邊的類型是目標類型。使用Map方法執行映射。
OrderDto dto = Mapper.Map<OrderDto>(order);
AutoMapper也有這些方法非泛型的版本,這是針對在編譯時你可能不知道類型的場合。
在哪里配置AutoMapper?
如果你使用靜態的Mapper方法,那么每個應用域(AppDomain)應該只發生一次配置。那就意味着最好的配置代碼的地方應該在應用啟動時,例如ASP.NET應用的Global.asax。一般來講,配置啟動類在自己的類中,並且這個啟動類從startup方法中調用。
以下為目錄,淺綠色為AutoMapper(一) ,橙色為AutoMapper(二),總之,同色文字為同一篇博客。