[非專業翻譯] Mapster – 映射配置繼承

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