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 claseProgram
y 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
Main
y 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.