Я пишу конфигурационную систему, в которой файл app.config динамически создается из различных фрагментов конфигурации, распределенных в разных местах. Система в настоящее время работает следующим образом:Задание ConfigurationManager для перезагрузки всех разделов
- Bootstrapper создает файл конфигурации.
- Bootstrapper инициализирует новый AppDomain с новым конфигурационным файлом в качестве файла конфигурации.
- В результате новый AppDomain настроен на использование нового файла конфигурации, и все работает нормально.
Мы хотели бы отойти от этого многократного подхода AppDomain; он добавляет уровень сложности, особенно когда речь заходит о неуправляемых библиотеках и другом устаревшем коде.
При переходе к одной AppDomain рабочий процесс изменится на:
- Загрузчик строит конфигурационный файл.
- Bootstrapper объединяет конфигурационный файл в собственный файл конфигурации.
- Bootstrapper обновляет его кеш ConfigurationManager.
- Bootstrapper запускает основное приложение в том же AppDomain.
Кажется, что ConfigurationManager кэширует разделы в памяти. Например, если я прочитал AppSettings до шага № 3, мне нужно позвонить: ConfigurationManager.RefreshSection("appSettings");
На самом деле, я должен убедиться, что любой раздел, который использовался загрузчиком, обновляется.
Я могу перебирать все разделы конфигурации в новом файле конфигурации и принудительно обновлять их, но это заставляет диспетчер конфигурации загружать любые сборки, указанные в файле конфигурации. Я бы хотел отложить это, если это возможно. Если существует способ сделать недействительным то, что в настоящее время имеет ConfigurationManager в памяти?