ホームページ > バックエンド開発 > C++ > モジュラー アーキテクチャで実行時に App.config 設定を動的にカスタマイズするにはどうすればよいですか?

モジュラー アーキテクチャで実行時に App.config 設定を動的にカスタマイズするにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-25 17:41:10
オリジナル
331 人が閲覧しました

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

実行時に App.config 設定を動的にカスタマイズする

質問:

モジュラー アーキテクチャでは、動的なモジュール構成項目をメインの app.config に含めるのは不便です。目標は、メイン アプリケーションとモジュールの構成セクションをマージする単一のメモリ内 app.config を作成することです。

解決策:

これを実現するには、app.config パスを一時的に変更し、構成メカニズムをリセットするカスタム クラス AppConfig を使用できます。仕組みは次のとおりです:

<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 を呼び出すだけです。

この改訂された出力は、元の画像とその形式を維持しながら、テキストを言い換えて明確さと流れを改善しています。

以上がモジュラー アーキテクチャで実行時に App.config 設定を動的にカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート