[非專業翻譯] Mapster - 配置例項
系列介紹
[非專業翻譯] 是對沒有中文文件進行翻譯的系列部落格,文章由機翻和譯者自己理解構成,和原文相比有所有不同,但意思基本一致。
因個人能力有限,如有謬誤之處還請指正,多多包涵。
正文
本文將說明 Mapster 中的 配置例項
配置例項
在 Mapster 中,預設的配置例項為 TypeAdapterConfig.GlobalSettings
,如果需要在不同場景下有不同的對映配置,Mapster 提供了 TypeAdapterConfig
用於實現此需求:
var config = new TypeAdapterConfig();
config.Default.Ignore("Id");
如何給 配置例項 新增l型別對映配置?
直接使用 NewConfig
和 ForType
方法即可:
config.NewConfig<TSource, TDestination>()
.Map(dest => dest.FullName,
src => string.Format("{0} {1}", src.FirstName, src.LastName));
config.ForType<TSource, TDestination>()
.Map(dest => dest.FullName,
src => string.Format("{0} {1}", src.FirstName, src.LastName));
通過將 配置例項 作為引數傳給 Adapt
方法來應用特定的型別對映配置:
注意! 配置例項 在程式中一定要作為單例存在,否則會影響效能!
var result = src.Adapt<TDestination>(config);
也可以建立一個指定 TypeAdapterConfig
的 Mapper
,使用 Mapper
來做對映:
var mapper = new Mapper(config);
var result = mapper.Map<TDestination>(src);
複製配置例項
如果想從現有的配置中建立配置例項,可以使用 Clone
方法。
例如 複製全域性配置例項 :
var newConfig = TypeAdapterConfig.GlobalSettings.Clone();
或者複製其它配置例項:
var newConfig = oldConfig.Clone();
Fork 配置
Fork
方法內部直接呼叫 Clone
方法,但是使用 Fork
方法的形式與使用 Clone
方法有些許差別。
Fork
方法通過傳入委託方法直接增加新的對映配置:
var forked = mainConfig.Fork(config =>
{
config.ForType<Poco, Dto>()
.Map(dest => dest.code, src => src.Id);
});
var dto = poco.Adapt<Dto>(forked);
以上程式碼等同於使用 Clone
方法實現的以下程式碼:
var forked = mainConfig.Clone();
forked.ForType<Poco, Dto>()
.Map(dest => dest.code, src => src.Id);
var dto = poco.Adapt<Dto>(forked);