実行時にapp.configを動的に調整します:クリーンなアプローチ
アプリケーション開発では、動的にロードされたモジュールでは、app.config
ファイルの調整が必要になることがよくあります。 ただし、潜在的な対立と不安定性により、メインapp.config
を直接変更することは一般に回避されます。
課題:configurationmanagerとキャッシュ
クラスと名前空間はキャッシングを使用します。 これは、アプリケーションが再起動するまで、初期構成の負荷後に行われた変更が有効になる可能性があることを意味します。
ConfigurationManager
System.Configuration
ソリューション:appconfigクラス
次のクラスは、この問題の解決策を提供します。 元のファイルに影響を与えることなく、ランタイムモジュールの
を変更できます。
AppConfig
app.config
どのように使用するか
<code class="language-csharp">public abstract class AppConfig : IDisposable { public static AppConfig Change(string path) { return new ChangeAppConfig(path); } protected abstract void Dispose(); private class ChangeAppConfig : AppConfig { private readonly string originalConfigPath = AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE").ToString(); private bool disposedValue; public ChangeAppConfig(string path) { AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path); ResetConfiguration(); } public override void Dispose() { if (!disposedValue) { AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", originalConfigPath); ResetConfiguration(); disposedValue = true; } GC.SuppressFinalize(this); } private static void ResetConfiguration() { // Resetting internal ConfigurationManager state to reload config 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">// Temporary config modification using (AppConfig.Change(temporaryConfigPath)) { // Access and use the modified configuration } // Permanent config modification (replace default) AppConfig.Change(newConfigPath);</code>
このメソッドは、動的にロードされたモジュールの構成を管理するためのクリーンで効率的な方法を提供します。 デフォルトを直接変更し、安定性を確保し、競合を防止します。 その簡単な実装により、ランタイム構成の変更を必要とするさまざまなシナリオに適応できます。
以上がデフォルトの設定に影響を与えずに、実行時にapp.configファイルを動的に変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。