AutoMapper 是什麼?
AutoMapper是一個對象到對象的映射關系,對象到對象的映射是通過轉化一個類型對象輸入到一個不同的類型對象輸出來工作的,使得AutoMapper讓人感興趣的一點就是他提供了一些比較有趣的規則把繁重的工作從類型對象轉換算法中剔除掉,
只要類型對象遵循了AutoMapper建立的規則,基本上不需要額外的配置去做類型對象之間的轉化。
為什麼要用AutoMapper?
類型轉換代碼是令人討厭的,測試類型轉換代碼更加的令人討厭,AutoMapper提供了非常簡單的配置機制,類型轉換測試也變得同樣簡單,現在真正剩下的需要關心的問題是why use object-object mapping?,
類型轉化會發生在項目中很多地方,但是大部分發生在層與層之間的邊界,例如 UI/Domain 之間,或者Service/Domain 之間,通常來說一層關心的東西和另外一層關心的東西是不一致的,
所以對象到對象的映射產生了一個隔離的模型,這樣每一層的對象的變化更加獨立,僅僅會影響對象所在的層,對其他的層不會產生影響
如何使用AutoMapper?
首先,你需要Source類型和目標類型,這個目標類型在設計之初就會受到其所在層的影響,但是AutoMappers依然可以工作的很好,只要目標對象成員名稱和源對象成員名稱匹配,例如你有一個源對象屬性叫FirstName,
那麼他將會自動映射 到目標對象成員名稱叫FirstName的屬性,AutoMapper也支持Flattening。
當映射源類型到目標類型時,AutoMapper會忽略空引用異常,這是默認的設計,如果你不喜歡這種設計,你可以結合AutoMapper Custom-value-resolver,如果需要的話。
一旦你有了兩個類型,而且引用了AutoMapper,你就可以給這兩個類型添加映射,
Mapper.CreateMap<Order, OrderDto>();
左邊的類型是源類型,右邊的類型是目標類型,用下面的方法去執行一個映射
OrderDto dto = Mapper.Map<OrderDto>(order);
AutoMapper也有非泛型的方法。
在什麼地方配置AutoMapper?
如果你使用靜態的映射方法,配置時只需要在appDomain中配置一次,這意味著你最好的選擇就是把配置代碼方法在程序啟動項中,例如Global.asax。需要說明的是,在bootstrapper(啟動加載器)內配置自己,
這個bootstrapper也被稱作為啟動方法。
如何測試my mappings?
創建一個映射測試,你要做兩件事