如何為 .NET 中的不同環境使用不同的 .settings 文件?
.NET 允許您使用 .settings 文件來管理應用程序設置。我想以一種可以執行以下操作的方式分別儲存生產、開發和測試設置:
EnvironmentSettings environmentSettings; // get the current environment (Production, Development or Test) ApplicationEnvironment Environment = (ApplicationEnvironment) Enum.Parse(typeof(ApplicationEnvironment), Settings.Default.ApplicationEnvironment); switch (Environment) { case ApplicationEnvironment.Production: environmentSettings = Settings.Production; break; ... } string reportOutputLocation = environmentSettings.ReportOutputLocation;基本上,我想要兩個單獨的設置類:儲存所選環境和非環境特定屬性的通用設置類,以及名為 EnvironmentSettings 的第二個類的 3 個靜態實例。使用的實例應取決於通用設置類中指定的環境。
除了在靜態建構子中手動設置所有這些設置的值之外,還有什麼方法可以做到這一點?如果我必須這樣做,我寧願只擁有一個具有“DevOutputLocation”、“LiveOutputLocation”等屬性的大型設置類。
我的項目中可以有多個 .settings 文件,但這只會創建不相互派生的單獨類。所以我可以製作 DevelopmentSettings.settings、ProductionSettings.settings 和 TestSettings.settings 文件並賦予它們相同的屬性,但是我需要到處使用一堆 switch 語句來確定要使用哪個類,因為它們不是從公共類派生的.
我將這種方法用於 .config 文件,我相信它也會對您有所幫助。只需查看Scott Hanselman 的部落格文章和這個問題。意識形態很簡單,但效果很好。您只需要:
- 為不同的配置創建多個文件
- 按約定命名,例如 my.dev.settings、my.live.settings
- 創建建構後事件(見連結)
- 享受 =)
帶有設置的類的實例化程式碼將始終查看預設設置(在每次建構後將替換為所需的設置),因此這種方法需要最少的努力。
一個想法是,在一系列靜態值之間切換聽起來像是一種相當令人擔憂的做事方式。我建議查找單例模式。此模式為您提供了一個在對該類的所有引用之間共享的單個類實例,但是當它第一次載入時,您可以執行正常的初始化位來檢查您的環境並相應地設置值。
同樣,與其使用開關來作用於不同的類,您是否會考慮設計一個介面,並讓每個類都實現該介面?