Можно ли использовать неизменяемые типы в качестве свойств конфигурации с помощью API конфигурации .NET?Неизменяемые типы как свойства конфигурации
Скажем, у меня есть неизменный тип, который называется MyClass:
public class ImmutableClass
{
private readonly int value;
public ImmutableClass(int value)
{
this.value = value;
}
public int Value
{
get { return this.value; }
}
}
Я хотел бы использовать этот тип в качестве свойства конфигурации в ConfigurationSection:
public class MyConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("foo")]
public ImmutableClass Foo
{
get { return (ImmutableClass)base["foo"]; }
set { base["foo"] = value; }
}
}
Когда я делаю это, я могу Сериализуем и десериализуем MyConfigurationSection, потому что это исключает это исключение:
System.Configurati on.ConfigurationErrorsException: значение критерия свойства не может быть преобразовано в строку. Ошибка: Невозможно найти конвертер, который поддерживает преобразование в/из строки для критерия свойства типа «FindCriterion».
Если я получить ImmutableClass от ConfigurationElement, я получаю это исключение при попытке сериализации и десериализации раздел конфигурации:
System.Reflection.TargetInvocationException: Исключение было брошено в целью вызова , ---> System.Reflection.TargetInvocationException: Исключение было выбрано целью вызова. ---> System.MissingMethodException: для объекта нет конструктора без параметров.
У меня есть полный контроль над ImmutableClass, поэтому я могу реализовать любой интерфейс.
Есть ли способ подключиться к API конфигурации, чтобы можно было использовать ImmutableClass таким образом?
+1. Спасибо, это сработало просто отлично. Я согласен, что в большинстве случаев просто идти с потоком было бы проще, и это тоже то, что я обычно делаю, но это был особый случай ... –
Полезно знать ... Я на самом деле экспериментирую с неизменяемыми типами и xaml сериализации. Я надеюсь, что преобразователи типов будут работать и на меня! – Will