2014-09-02 26 views
15

我有定義爲Automapper ResolveUsing或MapFrom

Mapper.CreateMap<Calculator, CalculatorViewModel>() 
    .ForMember(dest => dest.TypeIndicator, src => src.ResolveUsing(new TypeIndicatorResolver())); 

映射定義我應該使用ResolveUsingMapFrom(src => SomePrivateMethod())

ResolveUsing和MapFrom在複雜映射方面有什麼區別。

解析器或私有方法將轉到數據庫並獲取值。

+1

你的自定義解析器是做什麼的?如果'SomePrivateMethod'確實是私人的,那麼無論如何你都不能使用'MapFrom'。 – 2014-09-02 21:02:29

+0

目前它是一種私人方法,但如果我公開它應該使用MapFrom或ResolveUsing? – Angad 2014-09-05 11:11:20

回答

25

MapFrom使用表達式,而ResolveUsing使用Func。 MapFrom只允許性質的重定向:

ForMember(d => d.Foo, opt => opt.MapFrom(src => src.Bar.Baz.Foo)) 

ResolveUsing可以是任何東西

ForMember(d => d.Foo, opt => opt.ResolveUsing(src => HitDatabaseWithStuff(src)); 

我會使用一個解析器類時分辨率邏輯需要進行之中多個成員共享,或者如果我想讓解析器由服務定位器實例化。否則,一個私人方法是好的。

+1

好的。在這種情況下,解析邏輯將連接到數據庫並獲取一個值,然後將其分配/映射到dest。屬性。它不會被多個成員使用,但會執行存儲庫調用。 – Angad 2014-09-05 11:13:50

+2

'ForMember(d => d.Foo,opt => opt.MapFrom(src => new Bla {Meh = src.Bar.Baz.Foo}))'似乎工作得很好......所以它不僅僅是重定向或屬性,是嗎? – 2015-04-21 01:21:15