2016-07-26 78 views
-1

我們正在構建一個應用程序,並且我們有一個DataTranslationLayer負責將數據庫對象轉換爲視圖模型對象。AutoMapper初始化

因爲我們沒有將我們的數據庫對象傳遞給web項目,所以我們無法在global.asax中進行初始化。我們需要在DataTranslationLayer中進行初始化。

問題是,當我們實例化類,它做了另一個初始化,並且現在導致問題,因爲AutoMapper被設計爲只初始化一次。

所以我的問題是,有沒有人實現了類似的解決方案,你做了什麼?

解決方案是在DTL中創建一個靜態類,我們在應用程序啓動時調用該靜態類,還是有更優雅的解決方案?

回答

0

靜態AutoMapper只是一個薄層。您可以輕鬆創建一個或多個具有不同配置的AutoMapper實例。 有關如何操作,請參見my other answer

+0

嗯,有趣。謝謝 – griegs

0

我不知道這是什麼意思,你不會傳入數據庫對象到Web項目,但也許你有一個複雜的分層架構。在這種情況下,要做到這一點的方法之一是使用反射來加載所有配置文件:

var assembliesToScane = AppDomain.CurrentDomain.GetAssemblies(); 
    var allTypes = assembliesToScan.SelectMany(a => a.ExportedTypes).ToArray(); 

    var profiles = 
     allTypes 
      .Where(t => typeof(Profile).GetTypeInfo().IsAssignableFrom(t.GetTypeInfo())) 
      .Where(t => !t.GetTypeInfo().IsAbstract); 

    Mapper.Initialize(cfg => 
    { 
     foreach (var profile in profiles) 
     { 
      cfg.AddProfile(profile); 
     } 
    }); 

不要直接引用任何一個配置文件,但只是加載所有配置文件的從當前的AppDomain。