.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)。

真正的问题是,为什么您要给自己造成这么多麻烦?在某些时候,比起打架更好地退缩并接受它。如果您尝试以除为您安排的特定方式以外的任何方式来执行此操作,则该框架的某些部分会令人沮丧。

10-08 02:02