2014-09-02 12 views
15

Ich habe eine Mapping-Definition definiert alsAutoMapper ResolveUsing oder MapFrom

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

Sollte ich ResolveUsing oder MapFrom(src => SomePrivateMethod()) verwenden?

Was ist der Unterschied zwischen ResolveUsing und MapFrom, wenn es um komplexes Mapping geht?

Die Resolver oder Private-Methode wird in die Datenbank gehen und einen Wert erhalten.

+1

Was macht Ihr benutzerdefinierter Resolver? Wenn 'SomePrivateMethod' tatsächlich privat ist, können Sie' MapFrom' trotzdem nicht verwenden. –

+0

Im Moment ist es eine private Methode, aber wenn ich es öffentlich mache, sollte ich MapFrom oder ResolveUsing verwenden? – Angad

Antwort

25

MapFrom verwendet Ausdrücke, während ResolveUsing einen Func verwendet. MapFrom erlaubt nur die Umleitung von Eigenschaften:

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

ResolveUsing

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

alles sein kann ich eine Resolver-Klasse verwenden würde, wenn die Auflösung Logik unter mehr als ein Mitglied geteilt werden muss, oder wenn ich will den Resolver von einem Service-Locator instanziieren lassen. Ansonsten ist eine private Methode in Ordnung.

+1

ok. In diesem Fall muss sich die Auflösungslogik mit der Datenbank verbinden und einen Wert erhalten, der dann dem Ziel zugewiesen wird. Eigentum. Es wird nicht von mehr als einem Mitglied verwendet, führt jedoch einen Repository-Aufruf durch. – Angad

+2

'ForMember (d => d.Foo, opt => opt.MapFrom (src => neue Bla {Meh = src.Bar.Baz.Foo}))' scheint gut zu funktionieren ... so ist es nicht nur Umleitung oder Eigenschaften, oder? –

Verwandte Themen