[非專業翻譯] 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");