Принуждение ConfigurationManager перезагрузить все разделы

Я пишу систему конфигурации, в которой app.config файл динамично создается из различных фрагментов конфигурации, распределенных через несколько местоположений. Система в настоящее время работает следующим образом:

  1. Bootstrapper создает конфигурационный файл.
  2. Bootstrapper инициализирует новый AppDomain с новым файлом конфигурации как конфигурационный файл.
  3. В результате новый AppDomain настроен для использования нового файла конфигурации, и все хорошо работает.

Мы хотели бы отодвинуть от этого несколько подходов AppDomain; это добавляет слой сложности, особенно когда дело доходит до неуправляемых библиотек и другого унаследованного кода.

В перемещении в один AppDomain рабочий процесс изменился бы на:

  1. Bootstrapper создает конфигурационный файл.
  2. Bootstrapper объединяет конфигурационный файл в свой собственный конфигурационный файл.
  3. Bootstrapper обновляет свой кэш ConfigurationManager.
  4. Bootstrapper запускает главное приложение в том же AppDomain.

Кажется, что кэши ConfigurationManager разделяют в памяти. Так, например, если бы я считал AppSettings перед шагом № 3, то я должен звонить: ConfigurationManager.RefreshSection("appSettings"); На самом деле я должен удостовериться, что любой раздел, который использовался bootstrapper, обновляется.

Я могу выполнить итерации по всем разделам конфигурации в новом файле конфигурации, и сила обновляют их, но, это вынуждает менеджер конфигурации загрузить любые блоки, на которые ссылаются в файле конфигурации. Я хотел бы задержать это, если это возможно. Если там способ делать недействительным то, что ConfigurationManager в настоящее время имеет в памяти?

7
задан Szymon Rozga 6 July 2009 в 15:12
поделиться