2 ответов:
корень композиции-это единственное место в вашем приложении, где происходит композиция графов объектов для вашего приложения, используя контейнер инъекции зависимостей (хотя, как это делается, не имеет значения, это может быть использование контейнера или может быть сделано вручную с помощью pure DI).
должно быть только одно место, где это происходит, и ваш контейнер не должен использоваться вне корня композиции.
цитирование из одного из ответов, связанных с ниже:
на практике это означает, что вы следует настроить контейнер на корень вашего приложения.
- в настольном приложении, которое было бы в основном методе (или очень близко к нему)
- в Ан ASP.NET (включая MVC) приложение, которое было бы в Глобальный.асакс
- в WCF это будет в ServiceHostFactory
- etc.
там это хороший ответ здесь что объясняет немного больше об этом.
см. также ответ.
Марк Seemann написал большую статью о композиции корневой шаблон дизайна.
основные моменты из этой статьи:
корень композиции является (предпочтительно) уникальным местом в приложении где модули составлены совместно.
только приложения должны иметь корни композиции. Библиотеки и рамки не должны.
на контейнер DI следует ссылаться только из корня композиции. Все остальные модули не должно иметь ссылки на контейнер.
http://blog.ploeh.dk/2011/07/28/CompositionRoot/
Я написал свой собственный JavaScript Dependency Injection Framework под названием Di-Ninja с учетом этих принципов
https://github.com/di-ninja/di-ninja
Как я знаю, это единственный в javascript, который реализует шаблон дизайна Composition-Root и это может быть еще один хороший пример продемонстрировать, как это работает.
Он работает с NodeJS, браузером (с Webpack или UMD/AMD) и React-Native.
Comments