Automapper: использование BeforeMap и AfterMap - PullRequest
4 голосов
/ 11 мая 2010

Я использую automapper (успешно до определенного момента) для выполнения полиморфной карты между двумя интерфейсами, например так:

configure.CreateMap<IFrom, ITo>()
    .Include<FromImplementation1, ToImplementation1>()
    .Include<FromImplementation2, ToImplementation2>()
    ... ;

Это отлично работает. Кроме того, однако, интерфейсы включают сигнатуры методов, реализации которых предназначены для изменения объектов перед отображением:

public interface IFrom
{
    void PrepareForMapping();
}

Как видите, метод не имеет возврата, но предназначен для изменения состояния объекта перед выполнением сопоставления. В настоящее время этот метод вызывается вручную перед отображением объекта, но я намеревался выполнить метод автоматически перед отображением. Я попытался использовать его следующим образом:

configure.CreateMap<IFrom, ITo>()
    .BeforeMap((x,y) => x.PrepareForMapping())
    .Include<FromImplementation1, ToImplementation1>()
    .Include<FromImplementation2, ToImplementation2>()
    ... ;

Однако метод никогда не вызывается, хотя само отображение по-прежнему работает нормально. Я поместил точки останова на каждую реализацию метода PrepareForMapping (), и ни одна из них не получила удар. Поэтому я пришел к выводу, что либо неправильно понял, как работает BeforeMap / AfterMap, либо я делаю что-то не так (или оба).

Большое спасибо.

1 Ответ

5 голосов
/ 11 мая 2010

Для этого вам нужно поместить карту До / После на производные типы. Это связано с тем, что «Включить» перенаправляет карту на полиморфные типы. Это не аддитивная конфигурация, включенные карты заменяют конфигурацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...