Сериализация в XML и плагины
От: Аноним  
Дата: 24.11.10 08:07
Оценка:
Допустим у нас есть некоторые классы, которые мы хотим сериализовать в 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
...

Таким образом основное приложение должно знать о все плагинах. Последнее не совсем согласуется с понятием плагин. Как
можно реализовать подобную фукнциональность использую стандартные механизмы сериализации, не создавая "лишних" зависимостей?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.