[非專業翻譯] Mapster – 映射配置繼承
[非專業翻譯] Mapster – 映射配置繼承
系列介紹
[非專業翻譯] 是對沒有中文文檔進行翻譯的系列部落格,文章由機翻和譯者自己理解構成,和原文相比有所有不同,但意思基本一致。
因個人能力有限,如有謬誤之處還請指正,多多包涵。
正文
本文將說明 Mapster 中的映射配置繼承
隱式繼承映射配置
源類型
Mapster 默認會把 源類型的 映射配置 應用到 源類型的子類。
如創建了一個 SimplePoco
-> SimpleDto
的映射配置:
TypeAdapterConfig<SimplePoco, SimpleDto>.NewConfig()
.Map(dest => dest.Name, src => src.Name + "_Suffix");
那麼繼承了 SimplePoco
的 DerivedPoco
也將應用同樣的映射配置:
var dest = TypeAdapter.Adapt<DerivedPoco, SimpleDto>(src);
//dest.Name = src.Name + "_Suffix"
如果不希望子類使用父類映射配置,可以設置 AllowImplicitSourceInheritance
為 false
關閉繼承:
TypeAdapterConfig.GlobalSettings.AllowImplicitSourceInheritance = false;
目標類型
Mapster 默認不會把 目標類型的 映射配置 應用到 目標類型的子類。
可以設置 AllowImplicitDestinationInheritance
開啟:
TypeAdapterConfig.GlobalSettings.AllowImplicitDestinationInheritance = true;
顯示繼承映射配置
可以通過 Inherits
方法顯示的繼承類型映射配置:
TypeAdapterConfig<DerivedPoco, DerivedDto>.NewConfig()
.Inherits<SimplePoco, SimpleDto>();
子類繼承父類映射配置
可以通過 Include
方法顯示的讓子類繼承父類的映射配置:
TypeAdapterConfig<Vehicle, VehicleDto>.NewConfig()
.Include<Car, CarDto>();
Vehicle vehicle = new Car { Id = 1, Name = "Car", Make = "Toyota" };
var dto = vehicle.Adapt<Vehicle, VehicleDto>();
dto.ShouldBeOfType<CarDto>();
((CarDto)dto).Make.ShouldBe("Toyota"); // "Make" 屬性在 Vehicle 中不存在