運行時動態自定義 App.config 設置
問題:
在模塊化架構中,在主 app.config 中包含動態模塊的配置項很不方便。目標是創建一個單獨的內存中 app.config,它合併來自主應用程序和模塊的配置節。
解決方案:
為了實現這一點,我們可以使用一個自定義類 AppConfig
,它臨時更改 app.config 路徑並重置配置機制。以下是它的工作原理:
<code class="language-csharp">public abstract class AppConfig : IDisposable { public static AppConfig Change(string path) { return new ChangeAppConfig(path); } public abstract void Dispose(); private class ChangeAppConfig : AppConfig { private readonly string oldConfig; public ChangeAppConfig(string path) { oldConfig = AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE").ToString(); AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path); ResetConfigMechanism(); } public override void Dispose() { AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", oldConfig); ResetConfigMechanism(); } private static void ResetConfigMechanism() { typeof(ConfigurationManager) .GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static) .SetValue(null, 0); typeof(ConfigurationManager) .GetField("s_configSystem", BindingFlags.NonPublic | BindingFlags.Static) .SetValue(null, null); typeof(ConfigurationManager) .Assembly.GetTypes() .Where(x => x.FullName == "System.Configuration.ClientConfigPaths") .First() .GetField("s_current", BindingFlags.NonPublic | BindingFlags.Static) .SetValue(null, null); } } }</code>
用法:
<code class="language-csharp">// 使用默认的 app.config using (AppConfig.Change(tempFileName)) { // 使用指定路径下的 app.config } // 再次使用默认的 app.config</code>
注意:
要更改整個運行時的 app.config,只需在應用程序的開頭調用 AppConfig.Change(tempFileName)
,無需使用 using
塊。
This revised output maintains the original image and its format while rewording the text for improved clarity and flow. The technical content remains unchanged.
以上是如何在模組化架構中在執行時期動態自訂 App.config 設定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!