Сериализация в 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
...

Таким образом основное приложение должно знать о все плагинах. Последнее не совсем согласуется с понятием плагин. Как
можно реализовать подобную фукнциональность использую стандартные механизмы сериализации, не создавая "лишних" зависимостей?
Re: Сериализация в XML и плагины
От: Visor2004  
Дата: 24.11.10 08:47
Оценка: +1
Здравствуйте, Аноним, Вы писали:

Путь несколько не по теме, но все же. Используйте MEF для плагинов, тогда вообще не придется париться с подобными проблемами. Эта штука уже включена в поставку 4го фреймворка, для 3.5 сборку можно скачать с CodePlex по ссылке.
Помните!!! ваш говнокод кому-то предстоит разгребать.
Re: Сериализация в XML и плагины
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 24.11.10 08:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Допустим у нас есть некоторые классы, которые мы хотим сериализовать в XML:


А>
А>namespace ClassLibrary1
А>{
.......
А>}
А>

А>Для того, чтобы можно было сериализовать данные основного приложения и плагинов стандартными средствами,
А>необходимо расширить метаописание базовых классов:
А>
А>namespace ClassLibrary1
А>{
А>    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Plugin.Derived2))]
А>    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Derived1))]
А>    public abstract class Base
А>...
А>

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

Следует сделать свой класс реализующий IXmlSerializable, который будет использоваться для хранения настроек плагинов
метод WriteXml будет писать строкой тип и сериализованные настройки плагина, получается двойная сериализация
метод ReadXml парсит тип, создает XmlSerializer и т.д.
Re[2]: Сериализация в XML и плагины
От: Lloyd Россия  
Дата: 24.11.10 08:58
Оценка:
Здравствуйте, Visor2004, Вы писали:

V>Путь несколько не по теме, но все же. Используйте MEF для плагинов, тогда вообще не придется париться с подобными проблемами. Эта штука уже включена в поставку 4го фреймворка, для 3.5 сборку можно скачать с CodePlex по ссылке.


И как MEF поможет в плане описанной задачи?
Re: Сериализация в XML и плагины
От: Lloyd Россия  
Дата: 24.11.10 09:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Таким образом основное приложение должно знать о все плагинах. Последнее не совсем согласуется с понятием плагин. Как

А>можно реализовать подобную фукнциональность использую стандартные механизмы сериализации, не создавая "лишних" зависимостей?

Можно. Когда создаешь сериалайзер, используй конструктор, принимающий массив типов. В этом массиве должен быть реальный тип, который ты сериализешь.
Re[2]: Сериализация в XML и плагины
От: Lloyd Россия  
Дата: 24.11.10 09:09
Оценка:
Здравствуйте, Visor2004, Вы писали:

V>Путь несколько не по теме, но все же. Используйте MEF для плагинов, тогда вообще не придется париться с подобными проблемами. Эта штука уже включена в поставку 4го фреймворка, для 3.5 сборку можно скачать с CodePlex по ссылке.


Интересно, о чем думал rsn81, когда ставил +1?
Re[3]: Сериализация в XML и плагины
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 24.11.10 09:23
Оценка: +1
Здравствуйте, Lloyd, Вы писали:

L>Интересно, о чем думал rsn81, когда ставил +1?

Как я понял, achmed предложил MEF в качестве альтернативы хранения конфигурации модульной системы в XML. Там вроде как все в метаданных, соответственно, все делается за тебя.
Re[4]: Сериализация в XML и плагины
От: Lloyd Россия  
Дата: 24.11.10 09:32
Оценка:
Здравствуйте, rsn81, Вы писали:

L>>Интересно, о чем думал rsn81, когда ставил +1?

R>Как я понял, achmed предложил MEF в качестве альтернативы хранения конфигурации модульной системы в XML.

А где achmed увидел такую задачу? В первом посте ее нет.
Re[5]: Сериализация в XML и плагины
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 24.11.10 09:44
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>А где achmed

Я промазал, это был Visor2004.

L>увидел такую задачу? В первом посте ее нет.

Привычка такая — додумывать, предполагать. Не очень хорошая, но часто срабатывает. Рождается при чтении форумов и плохих ТЗ.

Ну там у него вводная была:
V>Путь несколько не по теме, но все же.
— которой по мне вполне достаточно, чтобы понять: это совет по возможной альтернативе — не факт, что верный.
Re[6]: Сериализация в XML и плагины
От: Lloyd Россия  
Дата: 24.11.10 09:46
Оценка: -1
Здравствуйте, rsn81, Вы писали:

R>Ну там у него вводная была:

V>>Путь несколько не по теме, но все же.
R>- которой по мне вполне достаточно, чтобы понять: это совет по возможной альтернативе — не факт, что верный.

я бы "не" сдвинул на пару слов вправо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.