我正在使用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是如何工作的,或者我做错了什么(或两者都有)。
非常感谢。
答案 0 :(得分:5)
对于这个,你必须将前/后映射放在派生类型上。这是因为Include将地图重定向到多态类型。它不是附加配置,Included地图取代了配置。