Empecemos por el principio, .net Core es un Framework de código abierto creado por Microsoft, que nos proporciona herramientas para el desarrollo de aplicaciones multiplataforma lo que significa que podemos desarrollar y ejecutar una aplicación en varios sistemas operativos, como Linux, Windows, iOS. Se pueden desarrollar en .net Core: aplicaciones de escritorio, aplicaciones web, aplicaciones móviles, juegos, inteligencia artificial, etc.
ASP.NET Core es un marco de trabajo para desarrollar aplicaciones web multiplataforma compilado con .Net Core.
Una técnica muy utilizada en java y tambien en .net es la inyección de dependencias que es una técnica en la que un objeto suministra las dependencias de otro. Está técnica nos permite evitar la creación de objetos, para lograr legibilidad y reuso de código.
Cualquier aplicación no trivial está formada por dos o más clases que colaboran entre sí para realizar alguna lógica. Tradicionalmente cada objeto se hacía cargo de obtener sus propias referencias a los objetos a los cuales colaboraba (sus dependencias). Esto lleva a código acoplado y difícil de probar.
Cuando se aplica inyección de dependencia le decimos a una entidad externa que provea las dependencias a los objetos. Esto nos resuelve el problema del acoplamiento.
El acoplamiento es un mal necesario ya que sin él los objetos no podrían interactuar para resolver problemas, pero cuan menor sea el acoplamiento es más reutilizable, comprobable y flexible.
La ventaja clave de inyección de dependencia es el acoplamiento débil. Si un objeto solo conoce sus dependencias mediante su interfaz (no su implementación o como fueron definidos) entonces la dependencia puede intercambiarse con una implementación diferente sin que el objeto dependiente sepa la diferencia.
La inyección de dependencias es una de las maneras de implementar Inversión de Control o IoC.
Netcore posee soporte nativo para Inyección de Dependencias, el cual es utilizado en Asp.net
Para injectar objetos, debemos utilizar los constructores de la clase. En los constructores indicamos que debe injectar el contenedor de .net, por ejemplo :
public class EjemploService
{
public EjemploService(UnRepositorio repository)
{
...
}
}
En el ejemplo se puede ver que se esta inyectando un UnRepositorio al servicio EjemploService y el contenedor puede saber que inyectar, dado que busca en la clase Startup que instancia debe injectar según el tipo. Esto se indica con esta linea :
services.AddTransient<UnRepositorio, UnRepositorioImpl>();
En la clase Startup.
Algo que no dije es que UnRepositorio debe ser una interfaz.De esta forma desacopamos la implementación.
La clase Startup esta contenida en el archivo Startup.cs en la carpeta raíz del proyecto.
Las aplicaciones ASP.NET Core debe incluir esta clase. Como su nombre indica, se ejecuta primero cuando se inicia la aplicación. Y tiene como objetivo brindar un conjunto de configuraciones para que nuestra aplicación pueda funcionar.
El método ConfigureServices es un lugar donde se registran las clases dependientes en el contenedor IoC o injección de dependencia. Después de registrar la clase dependiente, se puede usar en cualquier lugar de la aplicación. Solo necesita incluirlo en el parámetro del constructor de una clase donde desea usarlo y el contenedor de IoC lo inyectará automáticamente.
El método Configure es un lugar donde puede configurar la canalización de solicitudes de aplicaciones para su aplicación utilizando la instancia IApplicationBuilder que proporciona el contenedor IoC.