Допустим у нас есть некоторые классы, которые мы хотим сериализовать в XML:
namespace ClassLibrary1
{
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Derived1))]
public abstract class Base
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public abstract string DoSomething();
}
public class Derived1 : Base
{
private int someValue;
public int SomeValue
{
get { return someValue; }
set { someValue = value; }
}
public override string DoSomething()
{
return Name + SomeValue;
}
}
}
Допустим, мы теперь хотим организовать для нашего приложения систему плагинов. Плагины определяют унаследованные классы.
namespace Plugin
{
public class Derived2 : ClassLibrary1.Base
{
private string someValue;
public string SomeValue
{
get { return someValue; }
set { someValue = value; }
}
public override string DoSomething()
{
return Name + SomeValue;
}
}
}
Для того, чтобы можно было сериализовать данные основного приложения и плагинов стандартными средствами,
необходимо расширить метаописание базовых классов:
namespace ClassLibrary1
{
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Plugin.Derived2))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Derived1))]
public abstract class Base
...
Таким образом основное приложение должно знать о все плагинах. Последнее не совсем согласуется с понятием плагин. Как
можно реализовать подобную фукнциональность использую стандартные механизмы сериализации, не создавая "лишних" зависимостей?