Сервис Windows + дизайн плагинов - PullRequest
1 голос
/ 02 июля 2011

У меня есть служба Windows.Идея состоит в том, чтобы выполнить как можно больше разных задач.Допустим, у нас есть интерфейс IServicePart с методами Start () и Stop ().Когда служба запускается, она ищет все сборки в некотором каталоге и находит все классы, которые реализуют IServicePart.Готово, без проблем.

Проблема:

Assembly1.dll является хорошим кандидатом для IServicePart.Но для этого нужна конфигурация.Например Assembly1.dll.config.Теперь я могу скопировать / вставить / переименовать dll в task2.dll и task2.dll.config и создать вторую задачу для сервиса.Каждый из этих плагинов поставляется с 10-20 зависимостями dll

1) Наиболее очевидная проблема заключается в том, как загрузить конфигурацию, потому что appDomain узла службы отличается от Assembly1 и Task2.

2) Я ожидаю проблем при попытке загрузить две IServiceParts, когда они зависят от одних и тех же сторонних сборок

Решение 1 - создать пользовательскую конфигурацию и не использовать app.config.

Решение 2 - запустить каждый плагин в отдельном домене приложения.

Каковы ваши предложения.

Надеюсь, я все правильно объяснил

===================

ссылка: похожий вопрос здесь: Плагин для использования своего собственного app.config

1 Ответ

1 голос
/ 02 июля 2011

То, как я это сделал, предполагает наличие каждого плагина в отдельном домене приложения. Однако свойство codebase этих доменов приложений продолжает указывать на корневой каталог, где находится моя служба exe. Это достигает двух вещей:

  1. Многие третичные зависимости, которые есть у плагинов, теперь не нуждаются в дублировании. Например, я могу поместить свою сборку логгера в корневую папку (с exe-службой), и все плагины смогут ее увидеть. Это здорово, потому что я не хочу помещать свою сборку логгера в каждый подкаталог плагина и не хочу использовать GAC.
  2. Все плагины теперь используют одну и ту же конфигурацию приложения (одну и ту же, используемую exe-службой). Это хорошо или плохо, в зависимости от ваших потребностей. Но не забывайте атрибут configSource, который позволяет вам помещать определенные разделы конфигурации в отдельные файлы конфигурации в подкаталогах вашего плагина.

    Кстати, я использовал MAF для своих плагинов .

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