2016-05-24 152 views
1

是否可以設置automapper,以便如果MapFrom lambda的結果爲null /拋出NRE,它將查看不同的源。我現在的要求是很基本的,所以我已經能夠做到這一點:Automapper屬性偏好的層次結構

.ForMember(a=>a.CountryOfRisk, m=>m.MapFrom(a=>(a.CountryOfRisk??a.Issuer.CountryOfRisk).CountryCode)) 

但真正想什麼,我能夠做的就是這樣的事情:

a=>a.CountryOfRisk, m=>m.MapFrom(a=>a.CountryOfRisk.CountryCode) 
         .Coalesce(a=>a.Issuer.CountryOfRisk.CountryCode)) 

這意味着我可以創建一整套項目,這些項目將以一個很好的,基於配置的,易於閱讀的格式填充輸出字段。

回答

0

這是可能做到這一點自定義解析:

public class CustomResolver : ValueResolver<Source, string> 
{ 
    protected override string ResolveCore(Source source) 
    { 
     return source.CountryOfRisk ?? source.Issuer.CountryOfRisk; 
    } 
} 

Mapper.Initialize(cfg => 
    cfg.CreateMap<Source, Destination>() 
     .ForMember(dest => dest.CountryOfRisk, opt => opt.ResolveUsing<CustomResolver>()); 

https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers (?IValueResolver棄用ValueResolver應該工作)。

+0

謝謝。這對於更復雜的項目會很有用,但我一直在尋找更多內置的東西,這將允許我設置優先順序並選擇第一個非空/非異常答案。也許我應該停止懶惰,自己建立並提交它! – Stu