87

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

¿Cuándo debo usar uno sobre el otro?

ACTUALIZADO

Yo miraba a la WebConfigurationManager, y por alguna razón, no se puede acceder a las cadenas de conexión como lo hace en el ConfigurationManager (como una matriz). ¿Alguien puede decirme por qué MS lo hizo así? Parece ser una molestia obtener la cadena de conexión que necesita utilizando WebConfigurationManager.

¡ACTUALIZADO OTRA VEZ con CAVEAT!

Si no tiene una referencia al espacio de nombres "System.Configuration" agregado a su proyecto, entonces Visual Studio mostrará un error cuando intente acceder a WebConfigurationManager.ConnectionStrings como una matriz.

+1

No creo que 'salvedad' es muy preciso. Utilizo system.web.configuration para las cadenas de conexión sin necesidad de system.configuration – sclarson

Respuesta

83

WebConfiguratonManger 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 otro en subdirectorios. Puede pasar la ruta al método GetSection() para obtener una configuración anulada.

Si hubiéramos Looke en WebConfigurationManager con reflector entonces las cosas son claras:

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

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

WebConfigurationManager está hecho específicamente para aplicaciones ASP.NET.

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

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

Sugiero que eche un vistazo a WebConfigurationManager y vea si le ofrece algo que simplemente no puede hacer con ConfigurationManager y utilícelo; de lo contrario, al usar ConfigurationManager será mucho más fácil que su código se use sin interrupciones entre la web y aps de escritorio.

3

No está seguro de lo que quieres decir acerca de las cadenas de conexión.

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

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

4

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

Si usted está recibiendo 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 

asegurarse de que tiene una referencia a System.Configuration montaje

Cuestiones relacionadas