Ich schreibe ein Konfigurationssystem, in dem die app.config-Datei dynamisch aus verschiedenen Konfigurationsfragmenten erstellt wird, die über mehrere Standorte verteilt sind. Das System funktioniert derzeit wie folgt:
- Der Bootstrapper erstellt die Konfigurationsdatei.
- Der Bootstrapper initialisiert eine neue AppDomain mit der neuen Konfigurationsdatei als Konfigurationsdatei.
- Als Ergebnis ist die neue AppDomain so konfiguriert, dass sie die neue Konfigurationsdatei verwendet und alles funktioniert einwandfrei.
Wir würden gerne von diesem Ansatz mit mehreren AppDomains wegkommen, da er die Komplexität erhöht, insbesondere wenn es um nicht verwaltete Bibliotheken und anderen Legacy-Code geht.
Beim Wechsel zu einer AppDomain würde sich der Arbeitsablauf ändern:
- Der Bootstrapper erstellt die Konfigurationsdatei.
- Der Bootstrapper fügt die Konfigurationsdatei in seine eigene Konfigurationsdatei ein.
- Der Bootstrapper aktualisiert seinen ConfigurationManager-Cache.
- Der Bootstrapper startet die Hauptanwendung in derselben AppDomain.
Es scheint, dass der ConfigurationManager Abschnitte im Speicher zwischenspeichert. Wenn ich also zum Beispiel die AppSettings vor Schritt #3 lese, muss ich aufrufen: ConfigurationManager.RefreshSection("appSettings");
In der Tat muss ich sicherstellen, dass jeder Abschnitt, der vom Bootstrapper verwendet wurde, aktualisiert wird.
Ich bin in der Lage, über alle Konfigurationsabschnitte in der neuen Konfigurationsdatei zu iterieren und erzwingen Sie aktualisieren, aber dies zwingt den Konfigurations-Manager, um alle Baugruppen in der Konfigurationsdatei referenziert zu laden. Ich würde dies gerne aufschieben, wenn möglich. Gibt es eine Möglichkeit, das, was der ConfigurationManager derzeit im Speicher hat, ungültig zu machen?