Automapper:使用BeforeMap和AfterMap

时间:2010-05-10 21:43:27

标签: c# automapper

我正在使用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 个答案:

答案 0 :(得分:5)

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