是否有可能使用不可變類型作爲.NET配置API的配置屬性?作爲配置屬性的不可變類型
比方說,我有一個不變的類型,稱爲MyClass的:
public class ImmutableClass
{
private readonly int value;
public ImmutableClass(int value)
{
this.value = value;
}
public int Value
{
get { return this.value; }
}
}
我想用這種類型的配置節配置屬性:
public class MyConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("foo")]
public ImmutableClass Foo
{
get { return (ImmutableClass)base["foo"]; }
set { base["foo"] = value; }
}
}
當我這樣做,我可以對MyConfigurationSection進行序列化和反序列化,因爲它引發此異常:
System.Configurati on.ConfigurationErrorsException:屬性'標準'的值不能轉換爲字符串。該錯誤是:無法找到一個轉換器支持轉換爲字符串爲'FindCriterion'類型屬性'標準'的字符串。
如果我自ConfigurationElement派生ImmutableClass,我得到這個例外,當我嘗試序列化和反序列化配置部分:
System.Reflection.TargetInvocationException:異常被拋出通過調用的目標。 ---> System.Reflection.TargetInvocationException:調用的目標引發了異常。 ---> System.MissingMethodException:沒有爲此對象定義的無參數構造函數。
我完全控制ImmutableClass,所以我可以實現任何需要的接口。
有什麼辦法可以掛鉤到配置API,以便ImmutableClass可以用這種方式?
+1。謝謝,這工作得很好。我同意,在大多數情況下,隨着流動將更容易,這也是我通常做的,但這是一個特例... – 2009-09-18 14:29:21
有用的信息...我實際上正在試驗不可變類型和xaml序列化。我希望類型轉換器也適用於我! – Will 2009-09-18 14:35:00