Conversión de tipos
Crono incluye un framework de conversión de tipos flexible que permite convertir en tiempo de ejecución cadenas, números, colecciones e incluso objetos complejos. El sistema se construye alrededor de implementaciones de ITipoConvertidor (Crono.ComponenteModelo), descubiertas a través de una fábrica.
Convertidores integrados
TipoConvertidorFabrica mantiene una lista de proveedores que suministran convertidores para un tipo destino. Por defecto incluye proveedores para convertidores basados en atributos, primitivos simples, diccionarios y colecciones (TipoSimpleConvertidorProveedor, TipoColeccionConvertidorProveedor, TipoDiccionarioConvertidorProveedor, TipoAtributoConvertidorProveedor). Una solicitud de convertidor recorre estos proveedores y, si ninguno coincide, recae en un convertidor predeterminado.
Existen convertidores para los tipos más habituales: booleanos, DateTime, TimeSpan, enteros, nullables, enumerables, diccionarios, valores JSON, StringValues, etc.
Uso
La forma más cómoda es la extensión Convertir<T>(), que se apoya en la fábrica para realizar la conversión (respetando la cultura indicada):
// Cadena separada por comas a lista de enteros
var ids = "1,2,3".Convertir<IList<int>>();
// Diccionario a un objeto (POCO con constructor sin parámetros)
var diccionario = new Dictionary<string, object?> { ["Nombre"] = "Demo", ["Edad"] = 42 };
var persona = diccionario.Convertir<Persona>();
Este sistema es la base de otras utilidades del framework: por ejemplo, las configuraciones y los atributos genéricos guardan sus valores como texto y los convierten automáticamente al tipo de la propiedad al leerlos.
Convertidores personalizados
Implementar ITipoConvertidor permite convertir tipos arbitrarios. Un convertidor:
- Declara los tipos origen/destino que soporta (
PuedeConvertirDesde/PuedeConvertirHacia). - Implementa la lógica en los métodos de conversión (
ConvertirDesde/ConvertirHacia).
Puede suministrarse mediante un ITipoConvertidorProveedor propio o asociarse a un tipo con el atributo correspondiente, para que la fábrica lo descubra automáticamente.
Extender
Se pueden agregar proveedores adicionales a TipoConvertidorFabrica al iniciar la aplicación, para registrar convertidores específicos de un módulo. Esto permite soportar formatos propios del dominio o representaciones heredadas sin tocar el núcleo.