====== Modelo de Configuración ======
=====¿Que es?=====
Es un mecanismo que nos ofrece DotNet para realizar configuraciones en nuestras aplicaciones.
=====¿Como se usa?=====
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");
=====¿Como funciona?=====
Para empezar, la configuración de DotNet funciona como una herencia y todo empieza en el machine.config.
{{ cap:dotnet:config:dotnet_config.png }}
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.
=====¿Como se define una configuración personalizada?=====
La configuración personalizada se define en 2 partes.
- En el código
- En el archivo de configuración
====En el código====
* Se tiene que crear una clase y hacer que esta clase implemente la interface //IConfigurationSectionHandler//.
* En el método **create** escribir el código necesario para leer el contenido XML de la configuración y pasarla a la entidad o entidades necesarias.
public class MiConfiguracion : IConfigurationSectionHandler
{
public object Create(object parent, object configContext, XmlNode section)
{
//Leer XmlNode section para obtener los valores de la configuracion
}
}
====En el archivo de configuración====
* Agregar en la sección **configuration/configSections** la referencia a nuestra clase de configuración.
* Agregar en la sección **configuration** el contenido xml que define la configuración de nuestra clase de configuración
* Podemos trasladar el contenido a un archivo por medio del atributo //configSource//.
**Opción 1**
**Opción 2**