Каковы лучшие практики для библиотек классов, использующих внедрение зависимостей для внутренних операций?

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

Предполагая, что он будет использовать Castle Windsor (в качестве примера), что будет лучшим местом / методом для настройки контейнера, учитывая, что библиотека будет использоваться простым консольным приложением (без DI), веб-формы используют тот же контейнер (Castle Windsor), а веб-приложения используют другой контейнер (NInject)?

2 ответа

Решение

Я бы использовал здесь шаблон фасада: в библиотеке выставьте публичный метод для публичного класса, который выполняет инициализацию контейнера (например, простой Initialize()), и используйте Castle Windsor только внутри библиотеки, чтобы клиенты библиотеки даже не знали, что вы ее используете.

Не то чтобы ответ не сработал, но я думаю, что любой, кто приземлится здесь, должен взглянуть на этот Q / A. Прочитав его, я ДОЛЖЕН согласиться с тем, что using an IoC within a class library smells like a ServiceLocator (анти-шаблон) и что Coupling a library to a container is a smell,

Первоначально я думал, что буду делать что-то хорошее, лучше всего я сначала посмотрел.

Другие вопросы по тегам