Соответствующая ситуация для использования контейнера IoC? - PullRequest
2 голосов
/ 12 ноября 2009

Допустим, у меня есть общий проект службы WCF и консольного приложения, который не меняется в зависимости от конкретного клиента. У меня есть несколько интерфейсов в общих проектах, которые реализуются конкретным клиентским кодом. Код клиента явно меняется от клиента к клиенту. Я думаю, что это будет подходящее использование для контейнера IoC. В моих общих сервисных проектах я помещаю специфичные для клиента dll в корзину и связываю зависимости через IoC. Единственная хитрость заключается в том, что это нужно делать динамически, поскольку проекты общих служб не могут иметь прямой ссылки на конкретный клиентский проект. Ничего страшного, хотя.

Это правильное использование контейнера IoC?

Ответы [ 3 ]

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

Если я правильно понял вашу систему, возможно, вы сможете воспользоваться Managed Extensibility Framework .

1 голос
/ 12 ноября 2009

Внедрение зависимостей (DI - то, что вы называете IoC) - это немного другое существо, чем поддержка надстроек / подключаемых модулей.

Целью DI является управление зависимостями и уменьшение связи между различными частями системы. Это может выглядеть как надстройки, но немного отличается, потому что вы обычно просто заменяете одну реализацию интерфейса на другую.

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

В обоих случаях вам может потребоваться разрешить реализации во время выполнения на основе файлов конфигурации, сканирования папки или чего-либо подобного, поэтому существует большая степень перекрытия.

Что еще более усложняет то, что надстройки могут иметь самостоятельные зависимости, и вы можете захотеть их поддерживать (переезд на территорию DI).

Для сценария надстройки я поддержу предложение Konamimam: MEF звучит так, как будто оно соответствует вашим требованиям.

0 голосов
/ 12 ноября 2009

Да, это будет работать нормально. Вам просто нужно убедиться, что специфичные для клиента библиотеки DLL имеют собственную регистрацию. С StructureMap он будет реализован как классы Registry в клиентских DLL.

...