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