¿Cuál es la diferencia entre WebConfigurationManager y ConfigurationManager?

102

¿Cuál es la diferencia entre el WebConfigurationManagery el ConfigurationManager?

¿Cuándo debo usar uno sobre el otro?

ACTUALIZADO

Acabo de mirar WebConfigurationManagery, por alguna razón, no puede acceder a las cadenas de conexión como lo hace en ConfigurationManager(como una matriz). ¿Alguien puede decirme por qué la EM lo hizo así? Parece ser una molestia obtener la cadena de conexión que necesita usando el WebConfigurationManager.

¡ACTUALIZADO OTRA VEZ con CAVEAT!

Si no tiene una referencia al System.Configurationespacio de nombres agregado a su proyecto, entonces Visual Studio mostrará un error cuando intente acceder WebConfigurationManager.ConnectionStringsa una matriz similar.

John Bubriski
fuente
1
No creo que esa "advertencia" sea muy precisa. Uso system.web.configuration para cadenas de conexión sin necesidad de system.configuration
sclarson

Respuestas:

95

WebConfigurationManger sabe cómo lidiar con la herencia de configuración dentro de una aplicación web. Como sabe, podría haber varios archivos web.config en una aplicación: uno en la raíz del sitio y cualquier número en los subdirectorios. Puede pasar la ruta al método GetSection () para obtener una posible configuración anulada.

Si miramos WebConfigurationManager con Reflector, entonces las cosas están 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
fuente
25

WebConfigurationManager está diseñado específicamente para aplicaciones ASP.NET.

WebConfigurationManager proporciona métodos adicionales para cargar archivos de configuración aplicables a las aplicaciones web.

ConfigurationManager también proporciona métodos para cargar archivos de configuración aplicables a aplicaciones ".exe".

Sugeriría echar un vistazo a WebConfigurationManager y ver si le proporciona algo que simplemente no puede hacer con ConfigurationManager y usarlo en su lugar; de lo contrario, usar ConfigurationManager hará que sea mucho más fácil que su código se use sin problemas entre aplicaciones web y de escritorio.

Konstantin Tarkus
fuente
4

Aunque WebConfigurationManager se encuentra en el ensamblado System.Web, ConnectionStringSettingsCollection que devuelve se encuentra en System.Configuration.

Si recibe el error

No se puede aplicar la indexación con [] a una expresión de tipo 'System.Configuration.ConnectionStringSettingsCollection'

al intentar acceder al índice de la matriz ...

WebConfigurationManager.ConnectionStrings["Name"].ConnectionString

asegúrese de tener una referencia al ensamblaje System.Configuration

WDuffy
fuente
3

No estoy seguro de a qué te refieres con las cadenas de conexión.

Llamar a WebConfigurationManager.ConnectionStrings devuelve System.Configuration.ConnectionStringSettingsCollection, que es el mismo que obtendría si llamara ConfigurationManager.ConnectionStrings .

De lo contrario, como dice XOR, está diseñado para manejar múltiples web.configs jerárquicos, combinándolos según sea necesario a medida que se mueve por las carpetas en una aplicación.

Zhaph - Ben Duguid
fuente