Heim > Backend-Entwicklung > C++ > Wie kann ich App.config-Einstellungen zur Laufzeit in einer modularen Architektur dynamisch anpassen?

Wie kann ich App.config-Einstellungen zur Laufzeit in einer modularen Architektur dynamisch anpassen?

Barbara Streisand
Freigeben: 2025-01-25 17:41:10
Original
387 Leute haben es durchsucht

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

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:

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);
        }
    }
}
Nach dem Login kopieren

Verwendung:

// 使用默认的 app.config
using (AppConfig.Change(tempFileName))
{
    // 使用指定路径下的 app.config
}
// 再次使用默认的 app.config
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage