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