.NET的配置API是否可以将不可变类型用作配置属性?
假设我有一个名为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,因为它会引发以下异常:
如果我从ConfigurationElement派生ImmutableClass,则在尝试序列化和反序列化配置部分时,会遇到此异常:
我对ImmutableClass拥有完全控制权,因此我可以实现所需的任何接口(interface)。
有什么方法可以挂接到配置API中,以便可以以这种方式使用ImmutableClass?
最佳答案
您可能可以使用一些TypeConverters来帮助完成此过程(链接到System.Configurations.ConfigurationConverter)。
真正的问题是,为什么您要给自己造成这么多麻烦?在某些时候,比起打架更好地退缩并接受它。如果您尝试以除为您安排的特定方式以外的任何方式来执行此操作,则该框架的某些部分会令人沮丧。