¿Es posible usar tipos inmutables como propiedades de configuración con la API de configuración de .NET?Tipos inmutables como propiedades de configuración
Digamos que tengo un tipo inmutable llamada MiClase:
public class ImmutableClass
{
private readonly int value;
public ImmutableClass(int value)
{
this.value = value;
}
public int Value
{
get { return this.value; }
}
}
me gustaría utilizar este tipo como una propiedad de configuración en un ConfigurationSection:
public class MyConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("foo")]
public ImmutableClass Foo
{
get { return (ImmutableClass)base["foo"]; }
set { base["foo"] = value; }
}
}
Cuando hago esto, puedo 'serializar y deserializar MyConfigurationSection porque arroja esta excepción:
System.Configurati on.ConfigurationErrorsException: el valor de la propiedad 'criterio' no se puede convertir a cadena. El error es: no se puede encontrar un convertidor que admita la conversión a/desde cadena para la propiedad 'criterio' de tipo 'FindCriterion'.
Si derivo ImmutableClass de ConfigurationElement, consigo esta excepción al intentar serializar y deserializar la sección de configuración:
System.Reflection.TargetInvocationException: Se inició una excepción por el destino de una invocación . ---> System.Reflection.TargetInvocationException: Excepción ha sido lanzada por el objetivo de una invocación. ---> System.MissingMethodException: Ningún constructor sin parámetros definido para este objeto.
Tengo control total sobre ImmutableClass, por lo que puedo implementar la interfaz que sea necesaria.
¿Hay alguna manera de engancharme en la API de configuración para que ImmutableClass se pueda usar de esta manera?
+1. Gracias, funcionó bien. Estoy de acuerdo en que, en la mayoría de los casos, seguir el flujo sería más fácil, y eso es lo que suelo hacer, pero este fue un caso especial ... –
Es bueno saber ... En realidad estoy experimentando con tipos inmutables y xaml publicación por entregas. ¡Espero que los convertidores de tipos también funcionen para mí! – Will