我想了解圍繞.NET應用程序配置環境中立的最佳實踐。使.NET配置環境中立
背景。一些背景優先。我來自Java世界,而不是.NET世界,在Java中,我們可以通過某些事情來構建與環境無關的包。它們通常基於以某種方式提取配置。下面是一些例子:
- JNDI允許應用程序按名稱引用企業資源(例如,數據庫,JavaMail的會話,JCR庫等),然後將名稱映射到一個特定的配置根據環境(dev,test,prod)。
- 另一個例子是屬性文件。您可能需要在應用程序啓動時從已知位置的屬性文件中抓取應用程序的一堆屬性(例如「encryption_key」,「smtp.server.url」,「admin.email」等)。屬性鍵被映射到不同的值,這取決於環境。
- 一些應用程序開發框架(如Spring)知道如何在屬性文件中提取屬性,使其可以與框架配置集成。
我在Java中看到的另一種方法是構建時間方法,使用Ant(令牌替換)或Maven(構建配置文件)來構建特定於環境的程序包。我不太喜歡這種方法,僅僅是因爲我非常希望部署完全相同的包來測試和生產。但這是我見過的一種方法。
所需的解決方案。我假設在.NET中有一些類似的策略用於將配置(以及通過擴展包含的包)從其環境中解耦。
理想情況下,我想要一個解決方案,允許我保持與應用程序密切相關的非環境配置,僅對外部環境進行外部化。回到Java示例,很多時候,「配置」實際上是開發人員控制的東西,比如包含用於頁面裝飾的Sitemesh servlet過濾器,依賴注入或應用程序連接,映射諸如此類的MVC控制器方法到一個請求URI等等。那些東西我不想被外化。但是,加密密鑰,數據庫連接字符串,日誌級別等等,是的。