能否使用CollectionElementCollection来包含多种类型的CollectionElements,例如:
<collection>
<add type="MyType1, MyLib" Type1SpecificProp="1" />
<add type="MyType2, MyLib" Type2SpecificProp="2" />
</collection
我已经拥有实现这种解决方案所需的全部类:class MyCollection : ConfigurationElementCollection { }
class MyElement : ConfigurationElement { }
class MyType1 : MyElement { }
class MyType2 : MyElement { }
...
etc
但是当我启动我的应用程序时,我遇到了以下可预测的错误:
Unrecognized attribute 'Type1SpecificProp'。
这是因为Type1SpecificProp
定义在MyType1
而不是MyElement
中,特别是如果MyCollection
具有以下方法:
protected override ConfigurationElement CreateNewElement()
{
return new MyElement(); // but I want instantiate not the base class but by a type given
}
换句话说,它返回基类,因此子类中的OnDeserializeUnrecognizedAttribute()
永远不会被调用。
那么问题是:如何让子类自行解决未知元素?