Luego de varias semanas de ausencia creo que llego la hora de continuar con nuestra serie (no se preocupen, ya estamos llegando al final).
Converters
Es muy comun encontrarnos con momentos en que necesitamos transformar de un tipo a otro en un archivo de configuracion, por ejemplo, necesitamos transformar de un texto a un enumerador dado sin necesidad de usar la funcion “Enum.Parse”. Bien, para esos menesteres existen lo que en el namespace de Configuration se le llama “converters”, o clases especiales que se encargan de transformar de una representacion a un tipo dado.
System.Configuration viene con varios converters dentro de la cajita, algunos bastante utiles:
CommaDelimitedStringCollectionConverter |
Transforma de una cadena separada por comas a una coleccion de tipo CommaDelimitedStringCollection |
GenericEnumConverter |
Transforma de una representacion de cadena a un Enum |
InfiniteIntConverter |
Tranforma de un entero de tipo entero ilimitado |
InfiniteTimeSpanConverter |
Un tipo TimeSpan con soporte para representacion al infinito |
TimeSpanMinutesConverter |
Tipo TimeSpan usando minutos |
TimeSpanMinutesOrInfiniteConverter |
Tipo TimeSpan usando minutos con representacion al infinito |
TimeSpanSecondsConverter |
Tipo TimeSpan usando segundos |
TimeSpanSecondsOrInfiniteConverter |
Tipo TimeSpan usando segundos con representacion al infinito |
TypeNameConverter |
Retorna un “Tipo” a partir del nombre del tipo |
WhiteSpaceTrimStringConverter |
Retorna una cadena sin los espacios |
Una forma facil de enteder como funciona los converters es facil, simplemente veamos un ejemplo:
using System;
using System.ComponentModel;
using System.Configuration;
namespace ConfigurationSample {
internal struct ConfigurationConsts {
public const string Name = "type";
}
public class SampleConfigurationSection : ConfigurationSection {
[ConfigurationProperty(ConfigurationConsts.Name, IsRequired = true)]
[TypeConverter(typeof(TypeNameConverter))]
public Type Type {
get { return base[ConfigurationConsts.Name] as Type; }
set { base[ConfigurationConsts.Name] = value; }
}
}
}
Y bueno, veamos el archivo de configuracion, observen como se usa el nombre del tipo, mientras que en la seccion de configuracion retornamos el tipo (no la cadena que representa el tipo, ven? type safety de "gratis").
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="sample" type="ConfigurationSample.SampleConfigurationSection, ConfigurationSample" />
</configSections>
<sample type="ConfigurationSample.SampleTypeStuff, ConfigurationSample" />
</configuration>
Y para probar que todo funciona bien, nada mejor que nuestro "hola mundo"
using System;
using System.Configuration;
namespace ConfigurationSample {
class Program {
static void Main(string[] args) {
var configuration = ConfigurationManager.GetSection("sample") as SampleConfigurationSection;
if (configuration != null) {
var type = configuration.Type;
Console.WriteLine("The type name is {0}", type.Name);
Console.WriteLine("The type's assembly is {0}", type.Assembly);
}
Console.ReadLine();
}
}
}
Ven? bastante simple
los leo en la siguiente entrega

Pingback: Tweets that mention .NET y Configuraciones – Parte 9 | IDisposable Thoughts -- Topsy.com
Pingback: .NET y Configuraciones – Parte 10 | IDisposable Thoughts