Personalizar esqema de configuración en .Net (I)
Todo el mundo que ha trabajado con una aplicación .Net
conoce el archivo Web.config o sus homólogos para aplicaciones de escritorio
App.config (qué visual studio traduco con el nombre ejecutable.config) Y es muy
habitual utilizar la clase AppSettings para definir los parámetros de
configuración de la forma.
<appSettings>
<add key="Setting1" value="May 5, 2017"/>
<add key="Setting2" value="May 6,
2017"/>
</appSettings>
Pero en ocasiones necesitamos estructuras de datos más complejas o
simplemente darle un aspecto más profesional. Y para ello existe la clase ConfigurationSection
con la cual podemos definir una sección entera del archivo web.config.
Primero definimos nuestra clase de configuración. Utilizando un patrón Singleton para ofrecer una instancia única.
public sealed class MyConfigurationSection : ConfigurationSection
{#region Singleton
private MyConfigurationSection()
{
}
private static MyConfigurationSection
_CurrentConfiguration;
public static new MyConfigurationSection CurrentConfiguration
{get
{
if (_CurrentConfiguration == null)
{
_CurrentConfiguration = (MyConfigurationSection)ConfigurationManager.GetSection(@"myConfig");
}
return _CurrentConfiguration;
}}
#endregion
}
Y posteriormente definimos los parámetros de configuración que formaran parte de nuestra sección.
[ConfigurationProperty("serverUrl", IsRequired = false)]
public string
ServerUrl{
get { return (string)this["serverUrl"];
set { this["serverUrl"] = value; }}
Pudiendo definir si el campo es obligatorio o no, definiendo un valor por defecto.
[ConfigurationProperty("MaxUsers", IsRequired = false, DefaultValue =25)]
public long MaxUsers
{
get { return (long)this["maxUsers"]; }
set { this["maxUsers"] = value; }
}
Definir un valor máximo.
[LongValidator(MinValue = 1, MaxValue = 1000000, ExcludeRange = false)]
[ConfigurationProperty("MaxUsers", IsRequired = false, DefaultValue =25)]
public long MaxUsers
{
get { return (long)this["maxUsers"]; }
set { this["maxUsers"] = value; }
}
O especificar un tamaño de la cadena o una lista de caracteres invadidos.
[StringValidator(InvalidCharacters = " ~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)]
[ConfigurationProperty("FileName", IsRequired = true)]
public string FileName
{
get { return (string)this["fileName"]; }
set { this["fileName"] = value; }
}
Una vez tenemos nuestra
clase para leer el fichero de configuración, deberemos introducir la
configuración en nuestro fichero web.config o app.config, según proceda. De la
siguiente forma.
Primero definimos la
referencia a nuestra sección
<?xml version="1.0"?>
<configuration><configSections>
<section name="myConfiguration" type="namespace.MyServerConfiguration, Assembly" />
</configSections>
….
</configuration>
Y ya podemos definir
nuestra sección.
<myConfiguration serverUrl="http:// …." MaxUsers="48">
Comentarios