2010-05-10 199 views
4

我使用automapper(成功在一定程度上)到像這樣兩個接口之間進行多態性圖譜:Automapper:使用BeforeMap和AfterMap

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的工作方式,或者我做錯了什麼(或兩者都有)。

非常感謝。

回答

5

對於這個,你必須把Before/After映射放在派生類型上。這是因爲Include將映射重定向到多態類型。這不是一個附加配置,包含的地圖取代了配置。