Automapper:使用BeforeMap和AfterMap

Nig*_*gel 4 c# automapper

我正在使用automapper(成功达到某一点)在两个接口之间执行多态映射,如下所示:

configure.CreateMap<IFrom, ITo>()
    .Include<FromImplementation1, ToImplementation1>()
    .Include<FromImplementation2, ToImplementation2>()
    ... ;
Run Code Online (Sandbox Code Playgroud)

这很好用.此外,接口包括方法签名,其实现旨在在映射之前修改对象:

public interface IFrom
{
    void PrepareForMapping();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,该方法没有返回,但旨在在执行映射之前修改对象的状态.目前,在映射对象之前手动调用此方法,但我的目的是在映射发生之前自动执行该方法.我尝试使用它如下:

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

但是,该方法永远不会被调用,尽管映射本身仍然可以正常工作.我已经在PrepareForMapping()方法的每个实现上放置了断点,但没有一个被击中.所以我得出的结论是,我误解了BeforeMap/AfterMap的工作方式,或者我做错了什么(或两者都有).

非常感谢.

Jim*_*ard 5

对于这个,您必须将前/后映射放在派生类型上.这是因为Include将地图重定向到多态类型.它不是附加配置,Included地图取代了配置.