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

103

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

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

ОБНОВЛЕНО

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

ОБНОВЛЕНО СНОВА с CAVEAT!

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

Джон Бубриски
источник
1
Я не думаю, что это «предостережение» очень точно. Я использую system.web.configuration для строк подключения без необходимости system.configuration
sclarson

Ответы:

96

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);
}
XOR
источник
26

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

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

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

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

Константин Таркус
источник
4

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

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

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

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

WebConfigurationManager.ConnectionStrings["Name"].ConnectionString

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

WDuffy
источник
3

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

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

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

Жап - Бен Дугид
источник