IOC в архитектуре плагина Winforms - PullRequest
3 голосов
/ 05 февраля 2012

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

Когда возникает новое требование для нового проекта, обычно создается новый плагин.Этот плагин имеет основной класс плагина, а затем, возможно, ряд других классов и форм окон.

Основной класс плагина имеет методы инициализации, но в качестве его библиотеки классов не существует program.cs, так сказать, для подключениязависимости.

Есть ли способ через app.config соединить зависимости, или вы думаете, что мне следует избегать использования контейнера IOC и просто иметь метод фабрики в классе плагина, который каким-то образом связывает зависимости?

Проблема в том, что у меня может не быть возможности изменить код основного приложения для настройки контейнера IOC

Ответы [ 2 ]

2 голосов
/ 05 февраля 2012

Все основные контейнеры IoC имеют возможность связывать зависимости с app.config или с помощью механизма обнаружения сборки (как вы описали).Обычно основное приложение устанавливает контейнер, а затем переносится в контейнер, чтобы найти плагины (которые могут быть настроены с помощью конфигурации или сборкой, как вы описали выше).

Для SpringFramework.net, например,из app.config: http://www.springframework.net/doc-latest/reference/html/objects.html#d4e437

Для Castle Windsor пример проверки сборки: http://stw.castleproject.org/Windsor.Installers.ashx

1 голос
/ 05 февраля 2012

Хотя я думаю, что ваш вопрос немного расплывчатый, исходя из того, что я понял из вашего вопроса, я бы сказал, что IoC, скорее всего, будет лучшим способом решения проблемы!Вы можете использовать свой контейнер IoC для подключения фабрик, если хотите, или вы можете использовать его для подключения зависимостей подключаемого модуля. Лично мне нравится использовать StructureMap.Очень универсальный и простой в использовании контейнер IoC.

Вы можете использовать app.config для вывода списка имен зависимостей, а затем передать IoC имена для создания зависимостей.Используйте что-то вроде Activator для создания экземпляров.Лично я бы использовал как IoC, так и фабрики.Я бы использовал app.config, чтобы указать имена зависимостей, а затем использовать Factory для разбивки экземпляров классов подключаемых модулей.И, наконец, я бы использовал контейнер IoC, чтобы указать реализацию фабрики.

Надеюсь, что это пригодится!

...