Heim >Backend-Entwicklung >C++ >Wie kann ich App.config-Einstellungen zur Laufzeit in einer modularen Architektur dynamisch anpassen?
App.config-Einstellungen zur Laufzeit dynamisch anpassen
Frage:
In einer modularen Architektur ist es unpraktisch, dynamische Modulkonfigurationselemente in die Haupt-app.config aufzunehmen. Das Ziel besteht darin, eine einzelne app.config im Arbeitsspeicher zu erstellen, die Konfigurationsabschnitte aus der Hauptanwendung und den Modulen zusammenführt.
Lösung:
Um dies zu erreichen, können wir eine benutzerdefinierte Klasse AppConfig
verwenden, die den app.config-Pfad vorübergehend ändert und den Konfigurationsmechanismus zurücksetzt. So funktioniert es:
<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>
Verwendung:
<code class="language-csharp">// 使用默认的 app.config using (AppConfig.Change(tempFileName)) { // 使用指定路径下的 app.config } // 再次使用默认的 app.config</code>
Hinweis:
Um die app.config der gesamten Laufzeit zu ändern, rufen Sie einfach AppConfig.Change(tempFileName)
am Anfang der Anwendung auf, ohne den using
-Block zu verwenden.
Diese überarbeitete Ausgabe behält das Originalbild und sein Format bei, während der Text für mehr Klarheit und Fluss neu formuliert wird. Der technische Inhalt bleibt unverändert.
Das obige ist der detaillierte Inhalt vonWie kann ich App.config-Einstellungen zur Laufzeit in einer modularen Architektur dynamisch anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!