2011-06-15 41 views
10

會發生什麼事,當我打電話Mapper.CreateMap與同一類型的多次?Automapper - CreateMap多次調用

是否重寫以前的地圖?如果是這樣,如果我嘗試創建已經創建的地圖,是否有可能會引發異常?

回答

22

當幾次調用Mapper.CreateMap來獲取同一組源和目標時,根本沒有任何事情發生,因爲Mapper.CreateMap<TSource, TDestination>()沒有爲映射配置設置任何擴展。 如果設置IMappingExpression的覆蓋這樣 Mapper.CreateMap<TSource, TDestination>().ConstructUsing(x=>new TDestination(x.SomeField)), 比對,這個映射的配置將與新的替換。 關於你的問題的第二部分,我知道如何驗證地圖是否已經創建:

public TDestination Resolve<TSource, TDestination>(TSource source) 
{ 
    var mapped = Mapper.FindTypeMapFor(typeof(TSource), typeof(TDestination)); //this will give you a reference to existing mapping if it was created or NULL if not 

    if (mapped == null) 
    { 
     var expression = Mapper.CreateMap<TSource, TDestination>(); 
    } 
    return Mapper.Map<TSource, TDestination>(source); 
} 
+0

稍晚,但我相信它回答了這個問題。 – Euphoric 2011-07-15 05:26:31

+5

是否有任何開銷一次又一次地調用它?讓我們說,如果它在一個類的構造函數? – Baahubali 2015-06-18 02:05:02

+1

響應非常遲,但爲了其他人的閱讀益處,是的!目前,我正在盯着其中60%的CPU時間都花在打電話Mapper.CreateMap(擴展象上面的答案)業績報告 – Talonj 2016-10-19 18:00:34