Использование IoC для разрешения динамически загружаемых типов - PullRequest
2 голосов
/ 10 ноября 2009

Я написал программу, использующую Domain Driven Design, в .NET 2.0 и пытаюсь реализовать для нее инфраструктуру плагинов.

Я реализовал несколько типов плагинов:

  • Плагин домена

    • Агрегат домена, состоящий из одного или нескольких классов домена
    • Одна или несколько пар View / Presenter для отображения экземпляров совокупности
    • Служба импорта / экспорта, относящаяся к совокупности доменов
    • Класс репозитория
  • Сервисные плагины

    • Плагин базы данных (встроенный или удаленный)
    • Общие услуги импорта / экспорта (cvs, xml, форматы данных конкурентов и т. Д.)

Как видите, некоторые плагины затрагивают каждый уровень архитектуры. Можно сказать, что доменные плагины - это миниатюрные приложения, которые просто зависят от основного приложения, чтобы обеспечить среду для работы. Конечная цель - позволить пользователю приобретать и загружать только те плагины, которые ему нужны. Сначала я написал их как статические зависимости, потому что не реализовал механизм их динамической загрузки. Сейчас я пытаюсь справиться с динамической загрузкой.

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

Я использую Castle Windsor в качестве своего контейнера IoC и хотел бы воспользоваться его возможностями автоматического подключения как в приложении, так и в каждом плагине.

Как мне:

  1. Найти и загрузить в Windsor реализации определенного интерфейса
  2. Убедитесь, что Виндзор разрешает правильный

Если вы думаете, что я поступаю неправильно, не стесняйтесь так говорить. У меня еще есть время, чтобы изменить дизайн до моего крайнего срока.

Ответы [ 2 ]

3 голосов
/ 10 ноября 2009

Вы можете использовать что-то вроде Managed Extensibility Framework , чтобы обнаруживать и перечислять ваши плагины во время выполнения. Затем плагины могут зарегистрировать необходимые типы в вашем контейнере IoC при обнаружении.

3 голосов
/ 10 ноября 2009

Замечу, я вас полностью понял, но подумайте над тем, чтобы посмотреть на MEF (http://mef.codeplex.com/)

...