Qual é a diferença entre o WebConfigurationManager e o ConfigurationManager?

102

Qual é a diferença entre o WebConfigurationManagere o ConfigurationManager?

Quando devo usar um em vez do outro?

ATUALIZADA

Acabei de olhar para o WebConfigurationManagere, por algum motivo, você não pode acessar as strings de conexão como faz no ConfigurationManager(como uma matriz). Alguém pode me dizer por que o MS fez assim? Parece ser difícil obter a string de conexão necessária usando o WebConfigurationManager.

ATUALIZADO NOVAMENTE com CAVEAT!

Se você não tiver uma referência ao System.Configurationnamespace adicionado ao seu projeto, o Visual Studio mostrará um erro quando você tentar e acessar o WebConfigurationManager.ConnectionStringscomo um array!

John Bubriski
fonte
1
Não acho que "advertência" seja muito precisa. Eu uso system.web.configuration para strings de conexão sem a necessidade de system.configuration
sclarson

Respostas:

95

WebConfigurationManger sabe como lidar com a herança de configuração em um aplicativo da web. Como você sabe, pode haver vários arquivos web.config em um aplicativo - um na raiz do site e qualquer número em subdiretórios. Você pode passar o caminho para o método GetSection () para obter uma possível configuração substituída.

Se olharmos para WebConfigurationManager com Reflector, as coisas serão claras:

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

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

WebConfigurationManager é feito especificamente para aplicativos ASP.NET.

WebConfigurationManager fornece métodos adicionais para carregar arquivos de configuração aplicáveis ​​a aplicativos da web.

O ConfigurationManager também fornece métodos para carregar arquivos de configuração aplicáveis ​​a aplicativos ".exe".

Eu sugiro dar uma olhada em WebConfigurationManager e ver se ele fornece algo que você simplesmente não pode fazer com o ConfigurationManager e usá-lo em vez disso, caso contrário, usar o ConfigurationManager tornará muito mais fácil ter seu código usado sem problemas entre aps da web e desktop.

Konstantin Tarkus
fonte
4

Embora WebConfigurationManager esteja localizado na montagem System.Web, a ConnectionStringSettingsCollection que ele retorna está localizada em System.Configuration.

Se você está recebendo o erro

Não é possível aplicar indexação com [] a uma expressão do tipo 'System.Configuration.ConnectionStringSettingsCollection'

ao tentar acessar o índice da matriz ...

WebConfigurationManager.ConnectionStrings["Name"].ConnectionString

certifique-se de ter uma referência ao assembly System.Configuration

WDuffy
fonte
3

Não tenho certeza do que você quis dizer sobre as cadeias de conexão.

Chamar WebConfigurationManager.ConnectionStrings retorna um System.Configuration.ConnectionStringSettingsCollection, que é o mesmo que você obteria se chamasse ConfigurationManager.ConnectionStrings .

Caso contrário, como diz o XOR, ele foi projetado para lidar com vários web.configs hierárquicos, combinando-os conforme necessário à medida que você move as pastas em um aplicativo.

Zhaph - Ben Duguid
fonte