Шаблон проектирования для реализации плагинов в вашем приложении? - PullRequest
21 голосов
/ 07 октября 2008

Каков стандартный способ разрешения и внедрения системы плагинов для вашего приложения?

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

Одним из методов в интерфейсе является метод DoWork (), который периодически вызывается на всех загруженных сборках для выполнения любых действий, которые могут иметь плагины.

Каков "правильный" способ сделать систему плагинов? Вы просто создаете интерфейс для плагинов? Вы должны периодически вызывать определенный метод во всех плагинах? Есть ли более изощренный способ?


EDIT:

Спасибо, Мэтт Гамильтон, за ссылку на пространство имен System.Addin. Скорее всего, именно так я реализую свои плагины. Тем не менее, мне все еще интересно узнать об архитектуре плагинов в целом, и я не возражаю против некоторой предыстории о том, как лучше всего их проектировать, реализовывать ... как их вызывать после загрузки и т. Д.

Ответы [ 4 ]

9 голосов
/ 07 октября 2008
9 голосов
/ 07 октября 2008

Проверьте пространство имен System.AddIn согласно этому ответу на аналогичный вопрос.

5 голосов
/ 07 октября 2008

Гленн Блок и Брэд Абрамс из Microsoft недавно выпустили платформу Managed Extensibility Framework, которая обеспечивает среду для работы именно с тем, о чем вы говорите.

Документация и загрузка доступны здесь .

Блоги Гленна и Брэда также являются отличными ресурсами для MEF.

4 голосов
/ 07 октября 2008

С точки зрения строго проектного паттерна вы можете взглянуть на OSGi (это сильно ориентировано на Java, но считается очень, очень хорошей системой плагинов / модулей). Может быть, это излишне для того, чего вы пытаетесь достичь, но есть много действительно хороших вещей о том, как динамически обрабатывать загрузку и выгрузку модулей в середине цикла и т. Д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...