2012-03-09 3 views
0

У меня есть интересный сценарий, и ответ не выпрыгивает на меня. Я искал другие подобные вопросы, но никто, кажется, не рассматривал этот тип проблемы.Конфигурация Automapper для интересного сценария вложенных объектов

Прежде чем вы спросите, у меня нет контроля над макетом исходного кода.

Мой исходный объект выглядит следующим образом:

class Class1 
{ 
    string string1 
    string string2 
    string string3 
    string string4 
    string string5 
    string string6 
} 
class Class2 
{ 
    string foo 
    string bar 
} 
class Class3 //The source object!! 
{ 
    Class1 Inner1 
    Class2 Inner2 
} 

И мое назначение выглядит следующим образом:

class Destination 
{ 
    string string1 
    string string2 
    string string3 
    string string4 
    string string5 
    string string6 
    string string7 
} 

В действительности, Inner1 огромный класс и почти идеальный матч - за пару, кроме исключения. Я хотел бы использовать Automapper, чтобы напрямую копировать все из Inner1 в Destination, используя сопоставление по умолчанию, но также копировать Inner2.foo в Destination.string6 и Inner2.bar в Destination.string7.

EDIT: Я должен добавить, что прямо сейчас я переписываю Inner1 в пункт назначения, а затем делаю пару копий свойств вручную вне Automapper.

Любые предложения приветствуются.

ответ

0

Гадание вы в настоящее время есть что-то вроде этого:

Mapper.CreateMap<Inner1, Destination>(); 
... 
var inner1 = GetInner1(); 
var destination = Mapper.Map<Destination>(inner1); 
// now do manual hydration on destination using inner2 instance... 

Вы могли бы быть в состоянии уйти с этим:

Mapper.CreateMap<Inner1, Destination>(); 
Mapper.CreateMap<Inner2, Destination>() 
    .ForMember(d => d.string6, o => o.ResolveUsing(s => s.foo)) 
    .ForMember(d => d.string7, o => o.ResolveUsing(s => s.bar)) 
; 
... 
var inner1 = GetInner1(); 
var destination = Mapper.Map<Destination>(inner1); 

var inner2 = GetInner2(); 
Mapper.Map(inner2, destination); 
Смежные вопросы