2014-09-02 16 views
15

Ben veya MapFrom(src => SomePrivateMethod()) ResolveUsing kullanarak olmalı Automapper ResolveUsing veya MapFrom

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

olarak tanımlanan bir eşleme tanımı var?

Karmaşık eşleme söz konusu olduğunda ResolveUsing ve MapFrom arasındaki fark nedir?

Çözümleyici veya Özel yöntem veritabanına gider ve bir değer alır.

+1

Özel çözümleyiciniz ne yapar? 'SomePrivateMethod' gerçekten de özelse, 'MapFrom' özelliğini bu şekilde kullanamazsınız. –

+0

Şu anda özel bir yöntem ama eğer onu halka açık yaparsam MapFrom veya ResolveUsing kullanmalı mıyım? – Angad

cevap

25

MapFrom, İfadeleri kullanır, ResolveUsing bir Func kullanır.

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

ResolveUsing çözünürlüğü mantık birden fazla üye arasında paylaşılan gerektiğinde bir Çözümleyici sınıfı kullanırım

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

herhangi bir şey olabilir, ya da ben istiyorum: MapFrom sadece özelliklerin yönlendirme verir Çözümleyicinin bir hizmet konumlandırıcı tarafından başlatılması. Aksi halde, özel bir yöntem iyidir.

+1

ok. Bu durumda, çözünürlük mantığı veri tabanına bağlanmak ve daha sonra hedefe atanan/eşlenen bir değer elde etmektir. özelliği. Birden fazla üye tarafından kullanılmıyor, ancak bir depo araması yapıyor. – Angad

+2

'ForMember (d => d.Foo, opt => opt.MapFrom (src => yeni Bla {Meh = src.Bar.Baz.Foo}))' sadece iyi çalışıyor gibi görünüyor ... bu yüzden sadece yönlendirme değil veya özellikleri, öyle mi? –