首頁 >後端開發 >C++ >如何在模組化架構中在執行時期動態自訂 App.config 設定?

如何在模組化架構中在執行時期動態自訂 App.config 設定?

Barbara Streisand
Barbara Streisand原創
2025-01-25 17:41:10333瀏覽

How Can I Dynamically Customize App.config Settings at Runtime in a Modular Architecture?

運行時動態自定義 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn