Архитектура плагина dll с замком Виндзор - PullRequest
4 голосов
/ 02 августа 2011

У меня есть интерфейс IPlugin и фабрика IPlugin То, что я хочу сделать, это иметь возможность добавлять новые реализации IPlugin во время выполнения (например, добавление Dll с новой реализацией в папку «Плагины»).

Я использую Castle Windsor в качестве контейнера IoC и использую средство TypedFactory для реализации IPluginFactory. Итак, вот мой вопрос:

Как я могу зарегистрировать новые реализации IPlugin во время выполнения в windsor (я думаю о чем-то вроде добавления Dll, который содержит WindsorInstaller, но я не уверен, как действовать)

1 Ответ

6 голосов
/ 02 августа 2011

Windsor имеет некоторую поддержку плагинов, но это не является основной целью фреймворка.В частности, Windsor не предоставляет никакого готового механизма для обнаружения того, что новый .dll был добавлен в каталог.Он также не обеспечивает какой-либо формы изоляции OOTB от плагинов (в форме размещения их в отдельном AppDomain или другом).Он также не обеспечивает возможность выгрузки плагинов / компонентов (есть метод container.RemoveComponent(), но он на самом деле не работает и будет удален в следующей версии Windsor 3).

Возможно, сочетание MAF и MEF будет лучше соответствовать вашим требованиям.если вам нужно делать эти вещи во время выполнения.

Если вы ослабите свои требования безопасности (без изоляции) и требования к изменению времени выполнения (чтобы быть один раз, во время запуска ) Windsor можетподдержите этот сценарий.

Лучший способ сделать это - это иметь несколько инсталляторов (IWindsorInstaller) в сборке вашего плагина и использовать методы

container.Install(FromAssembly.InDirectory(...));

для обнаружения этих сборок и запуска регистрации инсталляторов.ваши компоненты плагина.

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