Что такое корень композиции в контексте внедрения зависимостей

Я изучаю внедрение зависимостей, и термин " корень композиции" используется повсеместно. Так что же это?

2 ответа

Решение

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

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

Цитата из одного из ответов, связанных с ниже:

На практике это означает, что вы должны настроить контейнер в корне вашего приложения.

  • В настольном приложении это будет в методе Main (или очень близко к нему)
  • В приложении ASP.NET (включая MVC) это будет в Global.asax
  • В WCF это будет в ServiceHostFactory
  • и т.п.

Здесь есть хороший ответ, который объясняет немного больше об этом.

Смотрите также этот ответ.

Марк Симанн написал отличную статью о шаблоне Composition Root.

Основные пункты этой статьи:

Корень композиции - это (предпочтительно) уникальное место в приложении, где модули составляются вместе.

Только приложения должны иметь корни композиции. Библиотеки и фреймворки не должны.

На DI-контейнер следует ссылаться только из корня композиции. Все остальные модули не должны иметь ссылки на контейнер.

http://blog.ploeh.dk/2011/07/28/CompositionRoot/

Я написал свою собственную среду внедрения зависимостей JavaScript под названием Di-Ninja с учетом этих принципов.

https://github.com/di-ninja/di-ninja

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

Он работает с NodeJS, браузером (с Webpack или UMD/AMD) и React-Native.

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