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