2012-10-25 83 views
1

想要實現一種基於模式的方法,可以在每個模塊中使用設置類 。棱鏡單體設置

我:

  1. Business Objects公司在裝配(不引用任何東西)
  2. 常見大會(基礎設施)
  3. 服務模塊 - 實現IModule的(在定義階段)

A設置類別:

[Serializable] 
public class Settings 
{ 
    public string DefaultStoreLocation 
    { get; set; } 
... 
} 

它應該在應用程序啓動的某個地方實例化。 ,並且該應用程序將在其生命週期中使用該單例實例。 e.g這裏:的applicationSettings

Settings ApplicationSettings = new Settings(); 

這一點我應該在哪裏把這個設置文件?

以及如何設置該策略?


疑惑:

  1. 應該使用ContainerControlledlifetimeManager同時登記每個模塊中的類型? (不知道確切時間和時間)。
  2. 它應該放在一個簡單的裝配中,或者如果我把它放在一個模塊中可能會更好。

回答

3

要實現基於模式的方法

不要試圖建立一個GOF-完整的應用程序。模式是從您的代碼演變而來的。不要強迫你的代碼看起來像一個模式,只是因爲你認爲它很酷。

Settings聽起來像屬於您的基礎設施的東西。把它放在那裏。基礎設施組件可以從任何模塊引用。

創建並填充引導程序中的設置。你也可以在那裏用Unity註冊它們。

var settings = new Settings { Foo = 1, Bar = "abc" }; 
container.RegisterInstance(settings); 

如果你的模塊有接受Settings類型的參數在創建時,容器會注入到設置模塊構造。

+0

+1,有關信息,仍然有一些小問題關於此。是的,我已將它放入基礎架構中,我在服務模塊的構造函數中實例化了Settings。我將設置每個其他模塊的依賴關係到服務模塊。認爲這種方式可能是一個好的結構,其他模塊(如DomainModule)可以使用ApplicationSettings。我在正確的方向嗎?那就是我所做的。關於你說的把它放在引導程序中的策略,其他模塊怎麼能訪問這個「ApplicationSettings」。再次感謝您的幫助 – Sypress

+0

請回答這個問題:我註冊了ApplicationSettings,使樣本模塊的構造函數接受類型並在那裏分配。我不是一個團結專家,它是否自動傳遞給模塊構造函數? – Sypress

+0

根據模塊在ModuleCatalog中的註冊方式,容器用於實例化它們。在引導程序中有一個與目錄相關的方法。如果你只註冊模塊類型而不是實例,它應該工作。對不起,奇怪的外殼。我的手機試圖幫助 –