代码之家  ›  专栏  ›  技术社区  ›  Nigel

automapper:使用beforemap和aftermap

  •  4
  • Nigel  · 技术社区  · 16 年前

    我正在使用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()方法的每个实现上都放置了断点,但没有一个被击中。所以我得出的结论是,我要么误解了地图绘制之前/之后的工作方式,要么是我做错了什么(或两者兼而有之)。

    多谢。

    1 回复  |  直到 16 年前
        1
  •  5
  •   Jimmy Bogard    16 年前

    对于这个,您必须将before/after映射放在派生类型上。这是因为include将映射重定向到多态类型。它不是附加配置,包含的映射替换了配置。