Re[10]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 22:28
Оценка: 30 (1) +2
Здравствуйте, btn1, Вы писали:

B>2) Вряд ли ваш "проект" — нечто серьёзное и большое, поэтому вот это амбициозное "А что если владелец сервиса закладок..." — скорее всего просто мечты. Думаю, наоборот — это ВЫ будете бегать за "владельцами закладок", чтобы расширить применимость своего продукта (какого, кстати, если не секрет?).


Ваш вопрос не по программированию а по жизни. Верь в свою мечту.

Будешь верить -- и не только владельцы сервисов закладок за вами будут бегать. А нет -- то и бегание за владельцами закладок не поможет.

B>Ну и так, в сторону: я не совсем понимаю, в чём у вас вообще сложность — плагины пишут третьекурсники, едва изучив C#! Неужто сами не можете написать элементарный загрузчик ДЛЛек из папки?? Там две функции — загрузить файл и создать экземпляр, чего тут городить-то?


Вручную написать -- не проблема. Много раз делал подобные вещи, в том числе с проверкой подписи плагина и криптованием. У меня опыт коммерческой разработки приближается к 10 годам.

Но, несмотря на свой опыт, я всегда продолжаю учиться и не гнушаюсь задавать вопросы.

Время идет, технологии изменяеются. Я могу чего то не учесть, о чем то не слышать. Нужно выбирать лучшее решение из существующих.
Re: Как лучше сделать плагинную систему сегодня?
От: Sinix  
Дата: 25.12.14 06:07
Оценка: 6 (3)
Здравствуйте, Shmj, Вы писали:

S>Сейчас рассматриваю варианты. Если кто может посоветовать -- милости прошу.


Основные варианты расписывал тут
Автор: Sinix
Дата: 12.09.13
. В общем случае я бы начал со второго варианта + MEF или своя реализация IServiceProvider. Этот вариант легко допиливается в любую из сторон. Если пути для плагинов известны заранее, трюка со вторым appdomain не потребуется.
Re: Как лучше сделать плагинную систему сегодня?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.12.14 22:53
Оценка: 1 (1) +1
Здравствуйте, Shmj, Вы писали:

S>Есть MEF. Есть Assembly.Load+руки. Есть сторонние библиотеки.

S>Что выбрать?

ИМХО MEF жутко overdesigned. По моему проще написать самому под конкретную задачу.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[13]: Как лучше сделать плагинную систему сегодня?
От: Sinix  
Дата: 28.12.14 14:56
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Пытаюсь понять с какой целью вы это пишите.

А посмотрите посты btn1. Он ходит из форума в форум и постит хрень. Иногда получается даже забавно, но спорить точно не надо. Это или троллинг (неудачный), или человек считает нормальным высказывать мнение по темам, в которых он вообще не разбирается
Re[5]: Как лучше сделать плагинную систему сегодня?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.12.14 10:27
Оценка: 16 (1)
Здравствуйте, Sinix, Вы писали:

S>Она не то чтоб спорна, просто mef под большие проекты заточен.


Overdesign вижу, заточку под большие проекты — не особо.

S> Он же продукт догфудинга


Догфудинг не панацея.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 25.12.14 01:34
Оценка: 1 (1)
Есть MEF. Есть Assembly.Load+руки. Есть сторонние библиотеки.

Что выбрать?

Задача простая: есть группа внешних сервисов со схожим функционалом, но с разным типом доступа. Конкретно, сервисы браузерных закладок. Фуниционал: создать группу ссылок, добавить ссылку у группу, посмотреть список групп, список ссылок, детали ссылки, сохранить копию страницы и пр. А вот реализация разная: в одном JSON, в другом XML, в третьем бинарный протокол и т.д.

Хотелось бы для каждого сервиса создать свою .dll-ину с реализацией протокола и общим интерфейсом. И чтобы при добавлении очередного сервиса, не нужно было пересобирать проект -- просто закинуть .dll в папку plugins.

Сейчас рассматриваю варианты. Если кто может посоветовать -- милости прошу.
Отредактировано 25.12.2014 1:43 Shmj . Предыдущая версия .
Re[2]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 02:51
Оценка: 1 (1)
Здравствуйте, Sinix, Вы писали:

S>Основные варианты расписывал тут
Автор: Sinix
Дата: 12.09.13
.


Про MEF там ничего нет.

S>В общем случае я бы начал со второго варианта + MEF


А зачем для MEF второй вариант? Он же самодостаточен.

S>или своя реализация IServiceProvider. Этот вариант легко допиливается в любую из сторон. Если пути для плагинов известны заранее, трюка со вторым appdomain не потребуется.


IServiceProvider имеет ли какую встроенную поддержку со стороны .Net? Или он, по сути, ничем не отличается от своего такого же интерфейса с методом типа object GetService(Type serviceType)?
Re[3]: Как лучше сделать плагинную систему сегодня?
От: Sinix  
Дата: 26.12.14 06:06
Оценка: 1 (1)
Здравствуйте, Shmj, Вы писали:

S>Про MEF там ничего нет.

А про него ничего и не надо расписывать, он прикручивается поверх почти любой схемы. Или загружаем сборки сами, или собираем источники в AggregateCatalog и всё.

S>>В общем случае я бы начал со второго варианта + MEF

S>А зачем для MEF второй вариант? Он же самодостаточен.
Потому что этот способ универсален: можно просто загружать ч/з Assembly.Load(), можно отдать на откуп MEF, можно избавиться от любого из способов и при этом не ломать совместимость с плагинами.

S>>или своя реализация IServiceProvider.

S>IServiceProvider имеет ли какую встроенную поддержку со стороны .Net? Или он, по сути, ничем не отличается от своего такого же интерфейса с методом типа object GetService(Type serviceType)?
Ничем. Просто стандартный способ для ситуации "надо же с чего-то начать"
Re[4]: Как лучше сделать плагинную систему сегодня?
От: Sinix  
Дата: 26.12.14 08:05
Оценка: 1 (1)
Здравствуйте, AndrewVK, Вы писали:

AVK>В каком смысле поподробнее? В MEF куча наворотов, полезность которых весьма спорна.

Она не то чтоб спорна, просто mef под большие проекты заточен. Он же продукт догфудинга, половина функционала в редакторе студии через mef прикручена.
Re[4]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 02:47
Оценка: +1
Здравствуйте, btn1, Вы писали:

B>Загоните их все в одну ДЛЛ и поставляйте вместе с прогой.


Тогда если добавится новый сервис -- пользователю нужно будет скачивать новую версию программы. А хотелось бы, чтобы просто получил с сайта список доступных плагинов и выбрал птичкой какой добавить.
Re[5]: Как лучше сделать плагинную систему сегодня?
От: IB Австрия http://rsdn.ru
Дата: 27.12.14 09:30
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Она не то чтоб спорна, просто mef под большие проекты заточен. Он же продукт догфудинга, половина функционала в редакторе студии через mef прикручена.

В MEF, к сожалению, не правильная последовательность была — там сначала овердизайн случился, а потом уже догфудинг.
Мы уже победили, просто это еще не так заметно...
Re[11]: Как лучше сделать плагинную систему сегодня?
От: btn1  
Дата: 27.12.14 12:31
Оценка: -1
Здравствуйте, Shmj, Вы писали:

S>Ваш вопрос не по программированию а по жизни. Верь в свою мечту.


Молодой человек, я уже слишком умный и старый, чтобы верить. Для верующих у меня есть единственное верное лекарство. Не поможет — значит это хронический ид... вобщем, не лечится.
РАБОТАТЬ надо, а не верить


S>Будешь верить -- и не только владельцы сервисов закладок за вами будут бегать.


Может, вы ещё верите в сказку "маленький еврейский мальчик разбогател, создав фэйсбук"?? Остыньте, вам это не грозит
Спросите Игоря Сысоева, сколько лет он шёл к банальной продаже своего нгынкса — вот вам _реальная_ история безо всяких загадочных дедушек.

S> А нет -- то и бегание за владельцами закладок не поможет.


Ну да. А плагинная система — поможет.


S>Вручную написать -- не проблема.

S>Но, несмотря на свой опыт, я всегда продолжаю учиться и не гнушаюсь задавать вопросы.

Увы, здесь вы путаете учёбу и технику. Да ещё приправляете это тщеславием.
Есть способ организации программы, при котором части программы выносятся в физически независимые модули, выборочно загружаемые во время работы. Это КОНЦЕПЦИЯ и именно она называется обучением мастерству программирования. А делаете вы это через функцию, МЕФ или КПСС — это техника, всего лишь примитивное освоение инструментария. Если вы понимаете концепцию, все остальные вопросы отпадают сами собой — вы К ЛЮБОМУ инструменту готовы. Но вопрос из топика прозвучал не "какие есть современные концептуальные достижения в области динамической загрузки программ", а банальное "я знаю много умных слов и не знаю какое выбрать".

S>Время идет, технологии изменяеются. Я могу чего то не учесть, о чем то не слышать. Нужно выбирать лучшее решение из существующих.


Это очевидно, неочевидно одно — ваши цели. Если вы двигаете бизнес (или пытаетесь хотя бы стать известным), плагиннная система тут не поможет — это вообще не техническое направление! А если вы хотите стать гуру и что-то там освоить, так и закладки тут не причём — гугл в помощь и корпите над МЕФами, смотрите на функции, варианты использования (особенно интересна в этом плане Visual Studio как IDE). Понимаете, в чём ошибка? Программисты очень любят свою работу, языки, всякие перделки, но в бизнесе они — профаны и за техническими плюшками не видят правильного направления — создают программу ради программы, т.к. фапают на её внутреннее совершенство.
Поставьте правильные цели и всё будет хорошо. Даже без веры.
Re[12]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 28.12.14 01:11
Оценка: +1
Здравствуйте, btn1, Вы писали:

B>РАБОТАТЬ надо, а не верить


Вы за свою богатую жизнь сколько раз рискнули и попытались сделать свой проект, без знания всех деталей достижения успеха? Не имея инструкции.

Если вы привыкли работать по четкой инструкции -- вряд ли.

Во многих случаях нет инструкции и невозможно вычислить математически каким будет итог, невозможно предвидеть все нюансы.

Вот это и называется вера -- гарантий нет, а ты все равно делаешь.

B>Если вы понимаете концепцию, все остальные вопросы отпадают сами собой — вы К ЛЮБОМУ инструменту готовы. Но вопрос из топика прозвучал не "какие есть современные концептуальные достижения в области динамической загрузки программ",


Вы неверно поняли суть вопроса.

B>а банальное "я знаю много умных слов и не знаю какое выбрать".


Пытаюсь понять с какой целью вы это пишите. То ли утвердитсья хотите за счет унижения других. То ли папа в детстве над вами издевался и теперь вы не упускаете случая задеть других?

B>Это очевидно, неочевидно одно — ваши цели. Если вы двигаете бизнес (или пытаетесь хотя бы стать известным), плагиннная система тут не поможет — это вообще не техническое направление!


Я вам привел пример с сервисом закладок и подключением функционала без выпуска новой версии программы.

Да, реально у меня не сервис закладок, просто подобрал наиболее близкую аналогию, чтобы не отходить от практики.
Отредактировано 28.12.2014 1:13 Shmj . Предыдущая версия . Еще …
Отредактировано 28.12.2014 1:12 Shmj . Предыдущая версия .
Re: Как лучше сделать плагинную систему сегодня?
От: btn1  
Дата: 25.12.14 22:21
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Задача простая: есть группа внешних сервисов со схожим функционалом, но с разным типом доступа. Конкретно, сервисы браузерных закладок.


Не постесняюсь выглядеть глупо, мне ваша мешанина вообще непонятна — сервисы, закладки, протоколы... Вы уверены, что не берёте молоток ради молотка? Может, тут хватит простой отвёртки?
Из прозвучавшего уловил только то, что городить плагины вы собираетесь тупо из-за разницы в форматах сериализации — А ОНО ТОГО СТОИТ?? Откуда у вас вообще такой зоопарк форматов? Возможно, имеет смысл описать задачу функционально, а не подкидывать нам ваши надуманные решения — тогда и ответы будут более конструктивные.
Re[2]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 01:04
Оценка:
Здравствуйте, btn1, Вы писали:

B>Не постесняюсь выглядеть глупо, мне ваша мешанина вообще непонятна — сервисы, закладки, протоколы... Вы уверены, что не берёте молоток ради молотка? Может, тут хватит простой отвёртки?


Нужно чтобы эти обертки можно было подключать без переустановки программы.

B>Из прозвучавшего уловил только то, что городить плагины вы собираетесь тупо из-за разницы в форматах сериализации — А ОНО ТОГО СТОИТ?? Откуда у вас вообще такой зоопарк форматов?


Зоопарк форматов из за отсутствия единого стандарта. Каждый сервис клепает по своему усмотрению.
Re[3]: Как лучше сделать плагинную систему сегодня?
От: btn1  
Дата: 26.12.14 02:09
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Нужно чтобы эти обертки можно было подключать без переустановки программы.


Загоните их все в одну ДЛЛ и поставляйте вместе с прогой.
Re[2]: Как лучше сделать плагинную систему сегодня?
От: Venom  
Дата: 26.12.14 05:22
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>ИМХО MEF жутко overdesigned.


Можно поподробнее?
Re[2]: Как лучше сделать плагинную систему сегодня?
От: Sinix  
Дата: 26.12.14 07:23
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>ИМХО MEF жутко overdesigned. По моему проще написать самому под конкретную задачу.


На мой поверхностный взгляд — нет, особенно если не лезть к нему внутрь. Ещё бы допилили разруливание зависимостей по naming convention как в asp.net vnext, совсем интересно было бы.

Другое дело, что MEF стоит применять только если не хватает стандартной комбинации IServiceProvider + хелперы для получения стандартных сервисов, иначе оверкилл получается.
Re[3]: Как лучше сделать плагинную систему сегодня?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.12.14 07:50
Оценка:
Здравствуйте, Venom, Вы писали:

AVK>>ИМХО MEF жутко overdesigned.

V>Можно поподробнее?

В каком смысле поподробнее? В MEF куча наворотов, полезность которых весьма спорна.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Как лучше сделать плагинную систему сегодня?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.12.14 10:27
Оценка:
Здравствуйте, Shmj, Вы писали:

S>IServiceProvider имеет ли какую встроенную поддержку со стороны .Net?


Стандартная компонентная модель его местами использует. А какая поддержка тебе нужна?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: Как лучше сделать плагинную систему сегодня?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.12.14 10:27
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Тогда если добавится новый сервис -- пользователю нужно будет скачивать новую версию программы. А хотелось бы, чтобы просто получил с сайта список доступных плагинов и выбрал птичкой какой добавить.


Это ему точно нужно?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: Как лучше сделать плагинную систему сегодня?
От: Sinix  
Дата: 26.12.14 10:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>Она не то чтоб спорна, просто mef под большие проекты заточен.

AVK>Overdesign вижу, заточку под большие проекты — не особо.
Да ладно, где там в mef 2 (он же lightweight mef) овердизайн?

Про применимость обоих версий кратко можно глянуть вот тут. А вообще в MEF с документацией фигово, даже rx получше выглядит.
Re[5]: Как лучше сделать плагинную систему сегодня?
От: btn1  
Дата: 26.12.14 11:29
Оценка:
Здравствуйте, Shmj, Вы писали:

B>>Загоните их все в одну ДЛЛ и поставляйте вместе с прогой.

S>Тогда если добавится новый сервис -- пользователю нужно будет скачивать новую версию программы. А хотелось бы, чтобы просто получил с сайта список доступных плагинов и выбрал птичкой какой добавить.

А! Понял. То есть если "птичкой" — то ничего скачивать не надо, а ДЛЛ-ка — её тащить надо!
Re[6]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 11:43
Оценка:
Здравствуйте, btn1, Вы писали:

B>А! Понял. То есть если "птичкой" — то ничего скачивать не надо, а ДЛЛ-ка — её тащить надо!


Скачать нужно только ту библиотеку, которая отвечает за досуп к нужному сервису. А вот программу переустанавливать не нужно будет.
Re[4]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 11:46
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Стандартная компонентная модель его местами использует. А какая поддержка тебе нужна?


Любая поддержка. Как IServiceProvider облегчает использование плагинов, по сравнению со своим аналогичным интерфейсом?
Re[6]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 11:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>Тогда если добавится новый сервис -- пользователю нужно будет скачивать новую версию программы. А хотелось бы, чтобы просто получил с сайта список доступных плагинов и выбрал птичкой какой добавить.


AVK>Это ему точно нужно?


Это открывает возможность создавать свои плагины, зная интерфейс. Плагины может создавать как разработчик основной программы, так и заинтересованные в использовании программы сторонние сервисы.
Re[5]: Как лучше сделать плагинную систему сегодня?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.12.14 12:13
Оценка:
Здравствуйте, Shmj, Вы писали:

AVK>>Стандартная компонентная модель его местами использует. А какая поддержка тебе нужна?

S>Любая поддержка.

Какая конкретно?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[7]: Как лучше сделать плагинную систему сегодня?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.12.14 12:13
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Это открывает возможность создавать свои плагины, зная интерфейс. Плагины может создавать как разработчик основной программы, так и заинтересованные в использовании программы сторонние сервисы.


А такие заинтересованные уже есть?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 12:13
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Другое дело, что MEF стоит применять только если не хватает стандартной комбинации IServiceProvider + хелперы для получения стандартных сервисов, иначе оверкилл получается.


А в чем оверкилл? Что может быть проще этого:

public interface ISystem
    {
        void Method1();
    }

    [Export(typeof(ISystem))]
    public class System1 : ISystem
    {
        public void Method1()
        {
            Console.WriteLine("System1");
        }
    }

    class Program
    {
        [ImportMany]
        private IEnumerable<Lazy<ISystem>> _systems;

        public Program()
        {
            var catalog = new AggregateCatalog();
            
            catalog.Catalogs.Add(new AssemblyCatalog(typeof(Program).Assembly));
            //catalog.Catalogs.Add(new DirectoryCatalog(@"C:\Extensions"));

            try
            {
                new CompositionContainer(catalog).ComposeParts(this);
            }
            catch (CompositionException compositionException)
            {
                Console.WriteLine(compositionException.ToString());
            }
        }

        static void Main(string[] args)
        {
            var p = new Program();

            foreach (var lazy in p._systems)
            {
                lazy.Value.Method1();
            }
        }
    }
Re[4]: Как лучше сделать плагинную систему сегодня?
От: Sinix  
Дата: 26.12.14 12:59
Оценка:
Здравствуйте, Shmj, Вы писали:

S>А в чем оверкилл? Что может быть проще этого:

А теперь раздуй до более-менее реального кода в пару сотен получателей (бизнес-код) и пары десятков предоставляемых сервисов.

Для serviceProvider достаточно прописать только источники и передать всем один и тот же провайдер (например через конструктор). Получатель сам заберёт нужное, тем более что выставляемые интерфейсы документируются через extension-методы к serviceProvider. Для MEF надо или изобретать способ, как передавать каталог, или вытаскивать создание всего, что получает зависимости в отдельный сервис и протаскивать ещё и этот сервис.
Re[7]: Как лучше сделать плагинную систему сегодня?
От: btn1  
Дата: 26.12.14 13:19
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Скачать нужно только ту библиотеку, которая отвечает за досуп к нужному сервису. А вот программу переустанавливать не нужно будет.


Месье первый раз слышит про ДЛЛ? Не надо её устанавливать — просто скачиваешь и перезаписываешь старую. А если совсем по уму, можешь даже rsync заюзать (передавать только бинарные отличия).
Re[5]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 13:35
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Для serviceProvider достаточно прописать только источники и передать всем один и тот же провайдер (например через конструктор). Получатель сам заберёт нужное, тем более что выставляемые интерфейсы документируются через extension-методы к serviceProvider.


А пример можно?
Re[8]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 13:36
Оценка:
Здравствуйте, btn1, Вы писали:

B>Месье первый раз слышит про ДЛЛ? Не надо её устанавливать — просто скачиваешь и перезаписываешь старую.


В таком случае только 1 поставщик программы может добавлять новые сервисы закладок. А что если владелец сервиса закладок (не разработчик программы) захочет написать плагин для программы, чтобы программа умела работать с его сервисом?
Отредактировано 26.12.2014 13:44 Shmj . Предыдущая версия .
Re[6]: Как лучше сделать плагинную систему сегодня?
От: Sinix  
Дата: 26.12.14 14:28
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>Для serviceProvider достаточно прописать только источники и передать всем один и тот же провайдер (например через конструктор). Получатель сам заберёт нужное, тем более что выставляемые интерфейсы документируются через extension-методы к serviceProvider.


S>А пример можно?

Так там всё просто,
IServiceProvider provider = new ServiceProvider()
{
  new MyService(), // : IMyService
  new LoggerService(), // : ILoggerService
  ...
};

...
// где-то в другом месте
IMyService x = provider.GetMyService(); // extension method, == provider.Get<IMyService>();

Собственно, всё. Код пишется за полчаса, потом без ломания контракта прикручивается что угодно, например:
* контексты (новые сервисы, скрытие сервиса на время)
* своя логика создания для отдельных сервисов
* фабрики (для однотипных получателей)
и т.д и т.п.
Отредактировано 26.12.2014 14:30 Sinix . Предыдущая версия .
Re[7]: Как лучше сделать плагинную систему сегодня?
От: Shmj Ниоткуда  
Дата: 26.12.14 15:28
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Так там всё просто,

S>[cs]
S>IServiceProvider provider = new ServiceProvider()
S>{
S> new MyService(), // : IMyService
S> new LoggerService(), // : ILoggerService
S> ...
S>};

Но ведь это не плагинная система. В случае с плагинами -- нужно подключить новый функционал без перекомпиляции.
Re[8]: Как лучше сделать плагинную систему сегодня?
От: Sinix  
Дата: 26.12.14 15:44
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Но ведь это не плагинная система. В случае с плагинами -- нужно подключить новый функционал без перекомпиляции.

Так речь в этой ветке вроде шла о mef вообще, без конкретных сценариев

В теории, ничего не мешает просканировать библиотеки в private bin path и подгрузить из них плагины, но тут мы уже настолько приближаемся к mef, что смысла в своём велосипеде никакого.
Re[9]: Как лучше сделать плагинную систему сегодня?
От: btn1  
Дата: 26.12.14 18:33
Оценка:
Здравствуйте, Shmj, Вы писали:

B>>Месье первый раз слышит про ДЛЛ? Не надо её устанавливать — просто скачиваешь и перезаписываешь старую.

S>В таком случае только 1 поставщик программы может добавлять новые сервисы закладок.

Я отнюдь не по неопытности рекомендую вам самый простейший путь. Конечно же, плагины — вещь намного более гибкая, чем статичная ДЛЛка, но:
1) Судя по вашему топику, с плагинами вы серьёзного дела не имели (но вы понимаете что к чему), поэтому вы затратите приличное количество времени на правильную реализацию (даже с готовыми библиотеками). Хотя это же время можно было бы потратить на более важный функционал.
2) Вряд ли ваш "проект" — нечто серьёзное и большое, поэтому вот это амбициозное "А что если владелец сервиса закладок..." — скорее всего просто мечты. Думаю, наоборот — это ВЫ будете бегать за "владельцами закладок", чтобы расширить применимость своего продукта (какого, кстати, если не секрет?).

Ну и так, в сторону: я не совсем понимаю, в чём у вас вообще сложность — плагины пишут третьекурсники, едва изучив C#! Неужто сами не можете написать элементарный загрузчик ДЛЛек из папки?? Там две функции — загрузить файл и создать экземпляр, чего тут городить-то?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.