Composition Root e Inyección de Dependencias en ASP.NET Core
El Composition Root o Raíz de Composición es el "lugar" donde se configuran las dependencias que el programa requerirá en tiempo de ejecución. Debe estar lo más cerca posible del Punto de Entrada o Inicio de la Aplicación; por lo que desde la versión 6 de ASP.NET Core en adelante y gracias a la simplificación de las Instrucciones de Nivel Superior o Top-level Statements, se define en el archivo Program.cs. En versiones anteriores el Entry Point estaba en la clase Startup.
De forma general la raíz de composición no es un método, ni una clase, es simplemente un concepto o patrón y su ubicación depende de la tecnología o tipo de aplicación a implementar. A continuación, se listan los diferentes puntos de entrada de tipos de aplicaciones comunes:
- Aplicación de Consola de .NET: El punto de entrada es el archivo
Program.cs, pero si no se implementan las instrucciones de nivel superior, se debe encapsular el código en la claseProgramy métodoMain. - Aplicación Web de ASP.NET Core: Como se menciono anteriormente, el punto de entrada es el archivo
Program.cs - Aplicaciones WPF y UWP: El punto de entrada es el archivo
App.xaml. - Servicio de Windows: El punto de entrada es el método
Mainy la claseProgram, ubicada en el archivoProgram.cs.
Como se puede observar, existe muchos tipos de aplicación; sin embargo, todas tienen en común el punto de entrada, inicio o raíz de la aplicación.
Tal y como se mencionó al inicio, la raíz de composición es donde se registran las dependencias en el IoC Container; por lo que es en ese mismo lugar donde se compone el Árbol de Objetos o Dependencias. Por esa razón, se debe encontrar en el punto de inicio de la aplicación; sin embargo, por organización puede también implementarse en varias clases o extensiones, siempre y cuando residan en un solo lugar, lo que garantiza que la composición de la aplicación se consolide y no se entremezcle con su lógica posterior.
La Raíz de Composición debe ser el único lugar donde se utilice el contenedor de dependencias o IoC, caso contrario se caería en los antipatrones Control Freak y Service Locator.
Artículos Relacionados
- Inyección de Dependencias en ASP.NET Core.
- Duración de los Servicios de Inyección de Dependencias en ASP.NET Core.
- Tipos Integrados e Inyección de Dependencias en ASP.NET Core.