Какая разница между WebConfigurationManager и ConfigurationManager?

В чем разница между WebConfigurationManager и ConfigurationManager?

Когда я должен использовать один над другим?

ОБНОВЛЕНО

Я только что посмотрел на WebConfigurationManager, и по какой-то причине вы не можете получить доступ к строкам соединения, как вы делаете в ConfigurationManager (например, массив). Может кто-нибудь сказать мне, почему MS сделал это так? Кажется, будет сложно получить нужную строку подключения с помощью WebConfigurationManager.

ОБНОВЛЯЕТСЯ СНОВА!

Если у вас нет ссылки на пространство имен System.Configuration добавленное в ваш проект, то Visual Studio выдаст ошибку при попытке доступа к WebConfigurationManager.ConnectionStrings как к массиву!

Ответ 1

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

Если бы мы смотрели на WebConfigurationManager с Reflector, то все ясно:

public static object GetSection(string sectionName)
{
    ...
    return ConfigurationManager.GetSection(sectionName);
}

public static object GetSection(string sectionName, string path)
{
    ...
    return HttpConfigurationSystem.GetSection(sectionName, path);
}

Ответ 2

WebConfigurationManager создан специально для приложений ASP.NET.

WebConfigurationManager предоставляет дополнительные методы для загрузки файлов конфигурации, применимых к веб-приложениям.

ConfigurationManager также предоставляет способы загрузки файлов конфигурации, применимых к приложениям .exe.

Id предлагает взглянуть на WebConfigurationManager и посмотреть, предоставит ли он вам что-либо, чего вы просто не можете сделать с ConfigurationManager, и вместо этого используйте его, иначе использование ConfigurationManager упростит использование вашего кода без использования веб-приложений и десктопов.

Ответ 3

Хотя WebConfigurationManager находится в сборке System.Web, ConnectionStringSettingsCollection, который он возвращает, находится в System.Configuration.

Если вы получаете сообщение об ошибке

Невозможно применить индексирование с [] к выражению типа 'System.Configuration.ConnectionStringSettingsCollection'

при попытке доступа к индексу массива...

WebConfigurationManager.ConnectionStrings["Name"].ConnectionString

убедитесь, что у вас есть ссылка на сборку System.Configuration

Ответ 4

Не уверен, что вы имеете в виду о строках соединения.

Вызов WebConfigurationManager.ConnectionStrings возвращает System.Configuration.ConnectionStringSettingsCollection, который будет таким же, как вы бы получили, если вы позвонили ConfigurationManager.ConnectionStrings.

В противном случае, как говорит XOR, он предназначен для обработки нескольких иерархических web.configs, объединяя их по мере необходимости, когда вы перемещаете папки в приложении.