2010-01-11 62 views
4

在我當前的解決方案中,我有18個項目,其中大多數都有自己的配置文件(app.config或web.config)。每個項目使用單個共享的BLL組件。我正在使用Autofac來處理依賴性,但還沒有以一種體面的方式管理我的配置。 配置條目大致相同,但值不同。有些項目使用自定義配置secions,有些則不是。使用DI框架處理多個配置文件的最佳實踐

我結束了:

  1. 創建單一autofac引導程序類註冊的所有依賴除了配置文件的包裝。
  2. 用IConfiguration接口創建單獨的程序集(由所有項目引用)。
  3. 創建每個項目自己的IConfiguration實現。
  4. 通過共享引導程序引導每個項目的相應位置。
  5. 引導註冊後,分別註冊項目自己的IC配置實現。

我對Autofac和DI非常陌生,力求在複雜性和可擴展性之間找到一個很好的平衡點。

是否有更好的方法來管理配置文件?

謝謝。

回答

4

在Autofac中,爲此使用模塊。相關組件組被封裝在由編程API配置的模塊中。

Autofac的XML配置支持模塊,所以一旦您決定在應用程序中使用它,您可以在配置文件中註冊模塊(而不是它包含的所有組件)。

模塊支持可以轉發給內部組件的參數,例如,連接字符串,URI等

這裏的文檔應該讓你開始:http://code.google.com/p/autofac/wiki/StructuringWithModules

HTH

尼克

+0

+1模塊聽起來完全像這裏需要的:) – 2010-01-11 12:37:10

3

作爲一個經驗法則,我只在.config文件中放置依賴項配置,如果它們代表我希望能夠更改而不重新編譯應用程序的內容。默認情況下,我沒有這樣的配置。我不知道AutoFac,但是在Castle Windsor中,你可以混合.config和容器的編程配置,這就是我通常做的:我在.config中配置了一些依賴項,因爲我希望能夠在不進行重新編譯的情況下對其進行更改,但其餘的代碼都已註冊(通常按慣例)。

我已經解決了類似於您的問題的方法是通過製作一個包含專用容器的獨立庫 - 這聽起來很像您的方法。這個專門的容器封裝了所有常見的依賴配置。

在每個應用程序中,我有一個更加專用的容器,它從共享容器派生並覆蓋需要覆蓋的任何配置。

我理解你的描述的方式似乎與你的描述並沒有太大區別,但是請你自己幫忙,並儘可能多地將配置從XML轉移到代碼中 - 這實際上變得更易於管理。

+1

同意使用配置的東西,你會改變而無需重新編譯。儘管如此,我認爲Windsor的設施可能會有所幫助(據我所知,它們可以通過將相關組件分組到單個窄配置外觀後扮演與Autofac模塊相同的角色。) – 2010-01-11 11:36:12