実行時に 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 サイトの他の関連記事を参照してください。