¿Qué es una raíz de composición en el contexto de la inyección de dependencia?

Resuelto Thomas asked hace 13 años • 2 respuestas

Estoy explorando la inyección de dependencia y el término raíz de composición se usa en todas partes. ¿Así que qué es lo?

Thomas avatar Jun 08 '11 18:06 Thomas
Aceptado

La raíz de composición es el único lugar en su aplicación donde tiene lugar la composición de los gráficos de objetos para su aplicación, usando el contenedor de inyección de dependencia (aunque cómo se hace esto es irrelevante, podría ser usando un contenedor o podría hacerse manualmente usando puro DI ).

Solo debería haber un lugar donde esto suceda y no debería ser necesario usar su contenedor fuera de la raíz de la composición.

Citando una de las respuestas vinculadas a continuación:

En la práctica, esto significa que debes configurar el contenedor en la raíz de tu aplicación.

  • En una aplicación de escritorio, eso estaría en el método Principal (o muy cerca de él)
  • En una aplicación ASP.NET (incluido MVC), estaría en Global.asax
  • En WCF, eso estaría en ServiceHostFactory
  • etc.

Hay una buena respuesta aquí que explica un poco más sobre esto.

Vea también esta respuesta .

Sam Holder avatar Jun 08 '2011 11:06 Sam Holder

Mark Seemann escribió un gran artículo sobre el patrón de diseño Composition Root.

Los puntos esenciales de este artículo son:

Una raíz de composición es una ubicación (preferiblemente) única en una aplicación donde los módulos se componen juntos.

Sólo las aplicaciones deben tener raíces de composición. Las bibliotecas y los marcos no deberían hacerlo.

Solo se debe hacer referencia a un contenedor DI desde la raíz de composición. Todos los demás módulos no deben tener referencia al contenedor.

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

Escribí mi propio marco de inyección de dependencia de JavaScript llamado Di-Ninja con estos principios en mente.

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

Como sé, es el único en JavaScript que implementa el patrón de diseño Composition-Root y su documentación podría ser otro buen ejemplo para demostrar cómo funciona.

Funciona con NodeJS, navegador (con Webpack o UMD/AMD) y React-Native.

DevTheJo avatar Dec 23 '2017 13:12 DevTheJo