是否可以使用不可变类型作为 .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,因为它会引发以下异常:
System.Configuration.ConfigurationErrorsException:属性“criterion”的值无法转换为字符串。错误是:无法找到支持“FindCriterion”类型的属性“criterion”与字符串之间进行转换的转换器。
如果我从 ConfigurationElement 派生 ImmutableClass,当我尝试序列化和反序列化配置部分时,我会收到此异常:
System.Reflection.TargetInitationException:调用目标已引发异常。 ---> System.Reflection.TargetInitationException:调用目标已引发异常。 ---> System.MissingMethodException:没有为此对象定义无参数构造函数。
我可以完全控制 ImmutableClass,因此我可以实现所需的任何接口。
有什么方法可以连接到配置 API,以便可以以这种方式使用 ImmutableClass?
我个人认为你最好将配置中的数据分开section(这似乎需要是可变的),以及如何在对象模型中表示它。没有什么可以阻止您拥有两种表示形式 - 用于配置的简单 (DTO/POCO) 版本和用于在应用程序中实际使用的自定义版本(在本例中是不可变的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)