2011-03-20 107 views
4

隨着AutoMapper返回的結構,我使用返回這樣Automapper:使用自定義解析

struct MyStruct 
{ 
     public int propA; 
     public int propB; 
     public int propC; 
} 

class MyResolver : ValueResolver<MyViewModel, MyStruct> 
{ 
    protected override MyStruct ResolveCore(MyViewModel source) 
    { 
     ....return MyStruct data 
    } 
} 

的結構我返回的結構,因爲映射規則相當複雜,我不能寫一個ValueResolver每個屬性的自定義解析器,因爲它們彼此相關。

所以我的想法是做一個解析器返回的結構和使用itike這個

AutoMapper.Mapper.CreateMap<MyViewModel, myData>() 
    .ForMember(dest => dest.SomePropA, src => src.ResolveUsing<MyResolver>().propA)) 
    .ForMember(dest => dest.SomePropB, src => src.ResolveUsing<MyResolver>().propB)) 

不幸的是,這是行不通的。

它看起來像src.ResolveUsing<MyResolver>()沒有返回的結構

任何幫助超過讚賞。

謝謝。

回答

8

通過使用FromMember您可以將來源的屬性傳遞給您的ValueResolver。

您可以使用這樣的事情:

.ForMember(dest => dest.SomePropA, opt=> opt.ResolveUsing<MyResolver>().FromMember(src => src.propA)) 

如果不指定FromMember,AutoMapper將源傳遞到您的ValueResolver。

+0

這不起作用,FromMember將一個值傳遞給解析器,它不允許你指定你需要的成員_from_解析器結果......除非你可以在解析器中添加一個討厭的'switch case',在輸入值上 – janv8000 2014-10-22 10:00:33