前言:
AutoMapper 幫我我們方便管理物件跟物件之間屬性值格式轉換
模型轉換
這裡有兩個類別
UserInfoModel 當作我們從DB撈取出來 模型資料
1 | public class UserInfoModel |
UserInfoViewModel 是呈現在UI或其他地方的模型
其中 Detail
欄位由 UserInfoModel
的 Name
和 Age
屬性組成的
1 | public class UserInfoViewModel |
這時我們就會引用 AutoMapper 幫我們統一管理轉換模型上的問題
建立一個Profile
設置UserInfoModel
對於 UserInfoViewModel
之前的欄位轉換
1 | public class UserInfoProfile : Profile |
而我們在註冊時會呼叫 AddProfile
方法
1 | Mapper.Initialize(x => x.AddProfile<UserInfoProfile>()); |
但每次新加Profile這邊都需要設置新的Profile,我們就會想有沒有方法可以讓他自動註冊?
我們可以使用反射來完成
反射自動註冊AutoMapper Profile
此程式我使用我的 ExtenionTool
1 | var profiles = Assembly.GetExecutingAssembly() |
上面程式碼很簡單清晰,呼叫 取得目前組件所有的
Profile
物件實體並且加到Profile
中,我們將上面程式碼在初始化執行一次
1 | public static IEnumerable<TResult> GetInstancesByAssembly<TResult>(this Assembly ass) |
核心程式使用Linq 動態取得你所需的類型並使用反射創建
之後我們就可以不用在手動把Profile
加至AutoMapper
容器中了
Source Code
此文作者:Daniel Shih(石頭)
此文地址: https://isdaniel.github.io/automapperinit/
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 TW 許可協議。轉載請註明出處!