Я использую XML для своих файлов конфигурации и в настоящее время десериализирую в объекты или списки объектов напрямую. Я также использую Managed Extensibility Framework (MEF) для создания расширений для нашей прикладной платформы, но я не нашел способа связать их вместе.
Например, если бы я хотел добавить новый объект в этот базовый классиспользуя XMLInclude:
[XmlInclude(typeof(SubObject1))]
[XmlInclude(typeof(SubObject2))]
[XmlInclude(typeof(SubObject3))]
//New XmlInclude Types based on plugins?
[XmlType("SupportedObject")]
public class SupportedObject
{
public string Name { get; set; }
}
с XML:
<SupportedObjects>
<SupportedObject xsi:type="SubObject1">
<Name>MainSub1</Name>
<SubObject1Param>FooBar</SubObject1Param>
</SupportedObject>
<!-- MEF Plugin Object -->
<SupportedObject xsi:type="MefObject1">
<Name>MainSub1</Name>
<MefParam1>something new</MefParam1>
</SupportedObject>
</SupportedObjects>
Первый объект будет нормально загружаться, потому что он определен с использованием XmlInclude, но как определить расширение, скомпилированное в DLLи загружен как ленивый объект списка с контрактом, который будет включен как поддерживаемый объект xmlinclude? Я очень расстроен.