Я написал программу, использующую Domain Driven Design, в .NET 2.0 и пытаюсь реализовать для нее инфраструктуру плагинов.
Я реализовал несколько типов плагинов:
Плагин домена
- Агрегат домена, состоящий из одного или нескольких классов домена
- Одна или несколько пар View / Presenter для отображения экземпляров совокупности
- Служба импорта / экспорта, относящаяся к совокупности доменов
- Класс репозитория
Сервисные плагины
- Плагин базы данных (встроенный или удаленный)
- Общие услуги импорта / экспорта (cvs, xml, форматы данных конкурентов и т. Д.)
Как видите, некоторые плагины затрагивают каждый уровень архитектуры. Можно сказать, что доменные плагины - это миниатюрные приложения, которые просто зависят от основного приложения, чтобы обеспечить среду для работы. Конечная цель - позволить пользователю приобретать и загружать только те плагины, которые ему нужны. Сначала я написал их как статические зависимости, потому что не реализовал механизм их динамической загрузки. Сейчас я пытаюсь справиться с динамической загрузкой.
Я пытаюсь использовать контейнер IoC для управления зависимостями, но мне трудно разобраться, как найти и загрузить плагины. В дополнение к интерфейсам, которые каждый плагин предоставляет основному приложению, у классов с каждым плагином также есть свои собственные интерфейсы, которые они используют для взаимодействия друг с другом.
Я использую Castle Windsor в качестве своего контейнера IoC и хотел бы воспользоваться его возможностями автоматического подключения как в приложении, так и в каждом плагине.
Как мне:
- Найти и загрузить в Windsor реализации определенного интерфейса
- Убедитесь, что Виндзор разрешает правильный
Если вы думаете, что я поступаю неправильно, не стесняйтесь так говорить. У меня еще есть время, чтобы изменить дизайн до моего крайнего срока.