Что такое корень композиции в контексте внедрения зависимостей - PullRequest
61 голосов
/ 08 июня 2011

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

Ответы [ 2 ]

63 голосов
/ 08 июня 2011

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

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

Цитата изодин из ответов, указанных ниже:

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

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

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

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

3 голосов
/ 23 декабря 2017

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

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

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

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

На контейнер 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...