Automapper: использование BeforeMap и AfterMap

Я использую 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, либо что-то делаю не так (или и то, и другое).

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


person Nigel    schedule 10.05.2010    source источник


Ответы (1)


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

person Jimmy Bogard    schedule 11.05.2010