Creando secciones de configuración personalizadas con ConfigurationSection. Como mejorar y organizar los ficheros de configuración y los deployments.

Organizar los web.config o app.config, es una tarea que debería estar presente en cualquier ciclo de desarrollo de software. Lamentablemente no siempre se realizan estas tareas, ya que el Framework de ASP.NET, nos facilita una serie de mecanismos para que de una forma muy sencilla, podamos acceder y almacenar la configuración que necesitemos en un momento x.

Anteriormente hemos visto como usando ficheros de settings, podemos organizar nuestro web.config de una forma muy eficiente y sencilla, ahora vamos a ver algo un poquito más avanzado, pero igual de fácil.

.Net, a través de su Framework (desde la versión 2.0), nos facilita una serie de clases que nos permiten personalizar los ficheros de configuración en función de nuestras necesidades, permitiéndonos crear nuestras propias secciones dentro de la configuración de manera que el web.config o app.config nos va a quedar mucho más organizado y consolidado.

Así pues si estas cansado de almacenar la configuración de tu aplicación como una lista interminable de entradas en el nodo appSettings y quieres organizarlo un poquito, continua leyendo y vamos al asunto.

Creando la clase que encapsula el acceso a nuestra sección personalizada dentro de la configuración.

Lo primero que vamos a hacer es crear la clase que nos va a permitir encapsular el acceso a nuestra sección personalizada. Esta clase debe heredar de la clase ConfigurationSection del Framework y posteriormente vamos a ir creando una propiedad por cada ítem que se vaya a almacenar en la configuración.

La clase puede ser algo así:

public class BlogSettings : ConfigurationSection
{
}

Ahora nos toca crear las propiedades que nos encapsulen el acceso, vamos a ello:

[ConfigurationProperty(TITLE_PROPERTY_NAME, DefaultValue="A deshoras", IsRequired=true)]
public string Title
{
get
{
return (string)this[TITLE_PROPERTY_NAME];
}
}

Como veis, estas propiedades están marcadas como ConfigurationProperty, y además, le indicamos el nombre de la propiedad dentro de la configuración, el valor por defecto y si es requerida o no.

Creando un Manager que gestione nuestra clase de configuración.

Como queremos que esto quede de maravilla, vamos a crear un manager, este se tiene que encargar de automatizar el acceso a la sección de configuración personalizada (custom configuration section) y la modificación si es preciso.

Para realizar estas funciones, vamos a crear una clase estática, que como miembro, tendrá una instancia de la clase que anteriormente hemos creado.

El manager, será algo así:

public static class BlogSettingsManager
{
#region constants
private static string BLOG_SETTINGS_NODE_NAME = "BlogSettings";
#endregion
#region members
private static BlogSettings _settings = ConfigurationManager.GetSection(BLOG_SETTINGS_NODE_NAME) as BlogSettings;
#endregion
#region Properties
public static BlogSettings Settings
{
get { return _settings; }
}
#endregion
}

Creando nuestra sección personalizada (custom configuration section) dentro del web.config o app.config.

Y ya solo nos queda añadir nuestra sección personaliza al web.config o app.config. Para ello, tenemos que añadir un nodo section hijo del nodo configSections, y en este nodo, tenemos que indicar el nombre de nuestra sección, y el tipo, que no viene a ser otra cosa que el nombre de la clase con el namespace y el nombre de la dll donde tengamos la clase que va a gestionar esta configuración (en nuestro caso BlogSettings).

El código sería el siguiente:

<configuration>
<configSections>
<section name="BlogSettings" type="CustomConfigurationSection.Framework.BlogSettings, CustomConfigurationSection.Framework"/>
</configSections>
<BlogSettings Title="Adeshoras" NumberOfItemsPerPage="20" />
</configuration>

Ahora solo nos queda usarlo a lo largo de nuestra app, y esto amigos míos, es lo más sencillo de todo, sería un código del estilo al siguiente:

BlogSettingsManager.Settings.Title

Como siempre, te recomiendo que te bajes este código y lo veas en vivo y en directo, seguro que te maravilla.

Nada más, como podéis ver mis druguitos, de una forma muy sencilla podemos encapsular el acceso a nuestra configuración y además personalizar los ficheros donde almacenamos la susodicha configuración (en nuestro caso web.config o app.config). Esto es muy simple y elegante y con una funcionalidad de este tipo, los deployments serán más sencillos ya que tendremos mucho más organizados nuestros ficheros de configuración.

Mientras he escrito este post, he estado escuchando a los Misfits y ahora es vuestro turno.

Anuncio publicitario