2012-02-12 4 views
3

У моего DTO (destination) есть куча логических значений.Automapper: несколько значений назначения, заполненных от одного значения источника

Например:

HasThisOption 
HasThatOption 
HasSomeOtherOption 

Эти значения населены делают некоторые вычисления на одном из полей модели объекта (источника). Это вычисление является немного дорогостоящим, поэтому вместо того, чтобы делать то же вычисление для каждого поля в DTO, я хотел бы только запустить вычисление один раз.

Простое решение является просто вызвать функцию из моего контроллера .. есть .. PopulateFields (источник, приемник)

Но я не хочу иметь вызовы Ignore для каждого поля назначения в моей конфигурации картографа. потому что их около 40 ... и это выглядит беспорядочно и на самом деле не имеет никакого смысла это делать.

Что обычно делают в этой ситуации?

ответ

4

Вы можете использовать AfterMap при определении вашего отображения между источником и типом назначения:

Mapper.CreateMap<Source, Dest>().AfterMap((source, dest) => 
{ 
    // do your custom computations and assignments here 
}); 

Если булевы поля нет в типе источника они будут игнорироваться в любом случае в течение стандартного отображения и есть их значения по умолчанию в месте назначения. Метод AfterMap позволяет вам их изменить.

+0

Они будут игнорироваться, но Mapper.AssertConfigurationIsValid() выдаст исключение. Я не знал о AfterMap, хотя .. – NoPyGod

Смежные вопросы