Có thể có một CollectionElementCollection với một số khác nhau theo loại CollectionElements, ví dụ:ConfigurationElementCollection với một số ConfigurationElements loại khác nhau
<collection>
<add type="MyType1, MyLib" Type1SpecificProp="1" />
<add type="MyType2, MyLib" Type2SpecificProp="2" />
</collection
tôi có đầy đủ các lớp học cần thiết cho giải pháp như:
class MyCollection : ConfigurationElementCollection { }
class MyElement : ConfigurationElement { }
class MyType1 : MyElement { }
class MyType2 : MyElement { }
...
etc
nhưng khi tôi khởi động ứng dụng, tôi nhận được lỗi dự đoán tiếp theo:
Unrecognized attribute 'Type1SpecificProp'.
vì Type1SpecificProp
được định nghĩa trong MyType1
không MyElement
, đặc biệt là nếu MyCollection
có phương pháp tiếp theo:
protected override ConfigurationElement CreateNewElement()
{
return new MyElement(); // but I want instantiate not the base class but by a type given
}
ví dụ: lợi nhuận lớp cơ sở như vậy OnDeserializeUnrecognizedAttribute()
trong con xếp vào loại không bao giờ được gọi.
Vì vậy, câu hỏi đặt ra là: làm thế nào để cho các lớp con giải quyết các yếu tố không xác định bằng chính chúng?
Tôi biết câu trả lời này đã được đăng cách đây một thời gian, nhưng bạn có thể đi sâu hơn một chút nếu bạn đánh dấu câu trả lời này là câu trả lời được chấp nhận không? – goric
@goric: Bạn cần kế thừa và ghi đè 'RetrieveConfigurationElementType' thành loại thay thế trong thời gian chạy. Đồng thời xem [NameTypeConfigurationElementCollection] (http://msdn.microsoft.com/en-us/library/ee939739%28PandP.50%29.aspx) – abatishchev