[非專業翻譯] Mapster – 映射配置
- 2021 年 6 月 24 日
- 筆記
[非專業翻譯] Mapster – 映射配置
系列介紹
[非專業翻譯] 是對沒有中文文檔進行翻譯的系列部落格,文章由機翻和譯者自己理解構成,和原文相比有所有不同,但意思基本一致。
因個人能力有限,如有謬誤之處還請指正,多多包涵。
正文
本文將說明 Mapster 中的映射配置
映射配置
使用 TypeAdapterConfig<TSource, TDestination>.NewConfig()
或 TypeAdapterConfig<TSource, TDestination>.ForType()
配置類型映射;
當調用 NewConfig
方法時,將會覆蓋已存在的類型映射配置。
TypeAdapterConfig<TSource, TDestination>
.NewConfig()
.Ignore(dest => dest.Age)
.Map(dest => dest.FullName,
src => string.Format("{0} {1}", src.FirstName, src.LastName));
如若不想覆蓋之前已經創建好的映射配置,可以使用 TypeAdapterConfig<TSource, TDestination>.ForType()
;
ForType
方法與 NewConfig
的差別:如果指定類型映射配置不存在,那它將創建一個新的映射,如果指定類型的映射配置已存在,那麼它將會擴展已有的映射配置,而不是刪除或替換已有的映射配置。
TypeAdapterConfig<TSource, TDestination>
.ForType()
.Ignore(dest => dest.Age)
.Map(dest => dest.FullName,
src => string.Format("{0} {1}", src.FirstName, src.LastName));
全局設置
使用全局設置將映射策略應用到所有的映射配置。
TypeAdapterConfig.GlobalSettings.Default.PreserveReference(true);
對於特定的類型映射,你可以使用 TypeAdapterConfig<SimplePoco, SimpleDto>.NewConfig()
覆蓋全局映射配置。
TypeAdapterConfig<SimplePoco, SimpleDto>.NewConfig().PreserveReference(false);
基於規則的映射配置
你可以使用 When
方法,當滿足某個條件時,進行一些特定的映射操作。
下面的這個例子,當任何一個映射的 源類型和目標類型 相同時,不映射 Id
屬性:
TypeAdapterConfig.GlobalSettings.When((srcType, destType, mapType) => srcType == destType)
.Ignore("Id");
在下面這個例子中,映射配置只對 IQueryable
生效:
TypeAdapterConfig.GlobalSettings.When((srcType, destType, mapType) => mapType == MapType.Projection)
.IgnoreAttribute(typeof(NotMapAttribute));
只配置目標類型
在不確定源類型的時候,使用 ForDestinationType
來創建針對於 目標類型 的映射配置。
比如使用 AfterMapping
在映射完成後調用目標類型對象的 Validate
方法:
TypeAdapterConfig.GlobalSettings.ForDestinationType<IValidator>()
.AfterMapping(dest => dest.Validate());
注意!在上面的程式碼段中指定目標類型為
IValidator
介面,那麼將會把映射配置應用到所有實現了IValidator
的類型。
泛型類型映射
如果映射的是泛型類型,可以通過將泛型類型傳給 ForType
來創建設置.
TypeAdapterConfig.GlobalSettings.ForType(typeof(GenericPoco<>), typeof(GenericDto<>))
.Map("value", "Value");