Es un mecanismo que nos ofrece DotNet para realizar configuraciones en nuestras aplicaciones.
Primero tenemos que agregar una referencia al ensamblado System.Configuration, después de agregar dicha referencia existen varias formas de utilizarlos dependiendo de la configuración que deseemos utilizar, por ejemplo:
Para leer una cadena de conexión
System.Configuration.ConfigurationManager.ConnectionStrings["nombreConexion"]
Para leer una llave de aplicación
System.Configuration.ConfigurationManager.AppSettings["nombreLlave"]
Para leer una configuracion personalizada
var cfg = (MiConfiguracion)System.Configuration.ConfigurationManager.GetSection("nombreMiConfiguracion");
Para empezar, la configuración de DotNet funciona como una herencia y todo empieza en el machine.config.
El machine.config es el archivo de mayor jerarquía en las configuraciones, este hereda a los web.config y a los app.config, en entornos web se usa el web.config, en las aplicaciones de escritorio se usa el app.config.
Existen configuraciones que pueden ser sobre-escritas, es decir, que una vez que se definieron pueden ser alteradas en sus herencias, pero existen otras configuraciones que no pueden ser sobre-escritas, es decir, una vez que se definieron su valor se mantiene durante toda la herencia.
Existe una carpeta llamada Config donde está el archivo machine.config y este hereda sus valores al archivo web.config que está en la misma carpeta, este archivo hereda su configuración al archivo web.config que se encuentra en cada sitio, y el archivo web.config de cada sitio hereda su configuración al archivo web.config de cada aplicación web, por último, cada archivo web.config de cada aplicación puede heredar su configuración a los archivos web.config de cada carpeta en la aplicación.
La configuración personalizada se define en 2 partes.
public class MiConfiguracion : IConfigurationSectionHandler { public object Create(object parent, object configContext, XmlNode section) { //Leer XmlNode section para obtener los valores de la configuracion } }
Opción 1
<configuration> <configSections> <section name="nombreSeccion" type="Full Qualified Name" /> </configSections> <nombreSeccion> <elementosDeConfiguracion atributosDeConfiguracion="" /> </nombreSeccion> </configuration>
Opción 2
<configuration> <configSections> <section name="nombreSeccion" type="Full Qualified Name" /> </configSections> <nombreSeccion configSource="nombreArchivoConfiguracion" /> </configuration>