Конфигурация Automapper для интересного сценария вложенных объектов - PullRequest
0 голосов
/ 09 марта 2012

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

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

Мой исходный объект выглядит так:

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 в место назначения, используя сопоставление по умолчанию, а также скопировать Inner2.foo в файл Destination.string6 и Inner2.bar в файл Destination.string7.

РЕДАКТИРОВАТЬ: Я должен добавить, что прямо сейчас я сопоставляю Inner1 с Destination, а затем делаю пару ручных копий свойств вне Automapper.

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

1 Ответ

0 голосов
/ 15 марта 2012

Думаю, у вас сейчас что-то вроде этого:

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);
...