[非專業翻譯] Mapster - 對映配置繼承

玩雙截棍的熊貓發表於2021-06-24

[非專業翻譯] Mapster - 對映配置繼承

系列介紹

[非專業翻譯] 是對沒有中文文件進行翻譯的系列部落格,文章由機翻和譯者自己理解構成,和原文相比有所有不同,但意思基本一致。

因個人能力有限,如有謬誤之處還請指正,多多包涵。

正文

本文將說明 Mapster 中的對映配置繼承

隱式繼承對映配置

源型別

Mapster 預設會把 源型別的 對映配置 應用到 源型別的子類。

如建立了一個 SimplePoco -> SimpleDto 的對映配置:

TypeAdapterConfig<SimplePoco, SimpleDto>.NewConfig()
    .Map(dest => dest.Name, src => src.Name + "_Suffix");

那麼繼承了 SimplePocoDerivedPoco 也將應用同樣的對映配置:

var dest = TypeAdapter.Adapt<DerivedPoco, SimpleDto>(src); 
//dest.Name = src.Name + "_Suffix"

如果不希望子類使用父類對映配置,可以設定 AllowImplicitSourceInheritancefalse 關閉繼承:

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 中不存在

相關文章