ConfigurationElementCollection с несколькими ConfigurationElements разного типа

Можно ли иметь 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

, но когда я запускаю свое приложение, я получаю следующую предсказуемую ошибку:

Нераспознанный атрибут '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 () в дочернем классе никогда не вызывается.

Итак, возникает вопрос: как позволить дочерним классам самостоятельно разрешать неизвестные элементы?

10
задан abatishchev 4 February 2011 в 20:30
поделиться