2014-09-02 21 views
15

Mam definicji mapowania zdefiniowanego jakoAutomapper ResolveUsing lub MapFrom

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

powinienem używać ResolveUsing lub MapFrom(src => SomePrivateMethod())?

Jaka jest różnica między ResolveUsing a MapFrom, jeśli chodzi o złożone mapowanie.

Metoda Resolver lub Private przejdzie do bazy danych i uzyska wartość.

+1

Co robi twój niestandardowy przelicznik? Jeśli 'SomePrivateMethod' jest rzeczywiście prywatny, nie będziesz w stanie tak czy inaczej używać' MapFrom'. –

+0

W tej chwili jest to metoda prywatna, ale jeśli zrobiłem to publicznie, powinienem używać MapFrom lub ResolveUsing? – Angad

Odpowiedz

25

MapFrom używa Expressions, a ResolveUsing używa Func. MapFrom tylko umożliwia przekierowanie właściwości:

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

ResolveUsing może być cokolwiek

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

Chciałbym użyć klasy rozpoznawania nazw, gdy logika rozdzielczość musi być dzielone między więcej niż jednego członka, lub jeśli chcę mieć resolver utworzony przez lokalizator usług. W przeciwnym razie metoda prywatna jest w porządku.

+1

ok. W tym przypadku logika rozdzielczości polega na połączeniu się z bazą danych i uzyskaniu wartości, która jest następnie przypisywana/mapowana do dest. własność. Nie jest używany przez więcej niż jednego członka, ale wykonuje wywołanie repozytorium. – Angad

+2

'ForMember (d => d.Foo, opt => opt.MapFrom (src => nowy Bla {Meh = src.Bar.Baz.Foo}))) wydaje się działać dobrze ... więc to nie tylko przekierowanie lub właściwości, prawda? –