В чем разница между использованием AppDomain и ConfigurationManager при получении пути к файлу конфигурации?


При получении пути к файлу текущего конфигурационного файла, в чем разница в использовании пространства имен AppDomain и пространства имен ConfigurationManager? И когда вы будете использовать один над другим?

Например, оба возвращают один и тот же путь:

string f1 = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

string f2 = ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None ).FilePath;
1 5

1 ответ:

Все сводится к тому, когда и зачем вам нужен файл конфигурации. Суть его такова:

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

В качестве грубого примера возьмем гипотетическое приложение, которое может использовать плагины, которые оно использует. добавляет / удаляет на лету. Вы не хотите, чтобы эти сборки плагинов хранились в памяти в течение всего срока службы приложения, что нарушило бы цель, поэтому вы создаете отдельный домен приложения в вашем приложении. Он будет обрабатывать загрузку и взаимодействие между приложением и сборками плагинов, делать с ними все, что вам нужно, и приложение может выгружать сборки, отбрасывая домен приложения всякий раз, когда это необходимо.

Плагин AppDomain имеет довольно много настроек, которые вы лучше хранить отдельно от файла конфигурации клиента, поэтому при создании домена приложения вы указываете отдельное расположение файла. В пределахэтого домена приложения конфигурационным файлом являетсяэтот файл .

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

Это очень общая идея, которая отмахивается от всей реализации, но, надеюсь, это начинает иллюстрировать, как эти два могут отличаться.

Вот страницы MSDN для обоих AppDomainSetup и OpenExeConfiguration () , которые могут быть полезны и имеют дополнительные ссылки на связанные с конфигурацией ресурсы.