Легко.
Система плагинов:
- Создайте интерфейс
IApplicationHost
, который определяет набор базовых методов (например, методы Resolve
и Register
в инверсии управления / внедрения зависимостей).
- Создать интерфейс
IPlugin
, который имеет метод Setup(IApplicationHost host)
. Каждый плагин использует его для настройки плагина.
- Добавить
Start
метод к IPlugin
тоже.
3) необходимо, так как плагины могут зависеть друг от друга. Сначала вы вызываете Setup
для каждого плагина, чтобы он мог зарегистрировать свои реализации интерфейса и т. Д. Следующее, что нужно сделать, это снова пройти через все плагины, чтобы вызвать метод Start
для каждого.
Все плагины загружаются с помощью Assembly.Load
. Просто назовите все плагины, например plugin_XXXX.dll
, чтобы их можно было легко идентифицировать.
Плагин архитектуры
Поскольку плагины могут использовать друг друга, вам нужен какой-то способ для поддержки этого. Самый простой способ - использовать шаблон Separated Interface, который означает, что вы помещаете все доменные объекты и сервисные интерфейсы в отдельную сборку. Это также значительно упрощает обратную совместимость при выпуске новых версий плагинов. Просто никогда не меняйте интерфейсы, расширяйте их.
Затем создайте библиотеку классов для фактического плагина. Он должен зависеть от собственной сборки интерфейса, сборки приложений и всех спецификаций сборок плагинов, от которых он зависит.