Sto scrivendo un sistema di configurazione in cui il file app.config è costruito dinamicamente da vari frammenti di configurazione distribuiti in più posizioni. Il sistema funziona attualmente come segue:Forzare ConfigurationManager per ricaricare tutte le sezioni
- Bootstrapper crea il file di configurazione.
- Bootstrapper inizializza il nuovo AppDomain con il nuovo file di configurazione come file di configurazione.
- Di conseguenza, il nuovo AppDomain è configurato per utilizzare il nuovo file di configurazione e tutto funziona correttamente.
Ci piacerebbe allontanarci da questo approccio a più AppDomain; aggiunge un livello di complessità, specialmente quando si tratta di librerie non gestite e altri codici legacy.
a trasferirsi in un AppDomain, il flusso di lavoro cambierebbe a:
- Bootstrapper costruisce file di configurazione.
- Bootstrapper unisce il file di configurazione nel proprio file di configurazione.
- Bootstrapper aggiorna la propria cache di ConfigurationManager.
- Bootstrapper avvia l'app principale nello stesso AppDomain.
Sembra che il ConfigurationManager memorizzi nella cache le sezioni. Ad esempio, se leggo AppSettings prima del punto 3, devo chiamare: ConfigurationManager.RefreshSection("appSettings");
Infatti, devo assicurarmi che ogni sezione che è stata usata dal bootstrapper sia aggiornata.
Sono in grado di eseguire l'iterazione su tutte le sezioni di configurazione nel nuovo file di configurazione e forzare l'aggiornamento, ma ciò impone al gestore di configurazione di caricare qualsiasi assembly a cui fa riferimento nel file di configurazione. Mi piacerebbe differire questo se possibile. Se esiste un modo per invalidare ciò che il ConfigurationManager ha attualmente in memoria?