[非專業翻譯] 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 中不存在