Inyección de dependencias en .NET
Aprende apropiadamente qué es la inyección de dependencias y cómo se aplica en un proyecto dotnet!

A mucho desarrolladores se les complica la vida tratar de entender este concepto, pero no es para nada difícil así que primero repasemos algunos conceptos importantes.

En esta otra entrada del blog hablo de forma más genérica sobre inyección de dependencias por si quieras repasar más conceptos.

¿Qué es una dependencia?

Es un comportamiento que se da entre clases cuando una clase depende de la instancia de otra para funcionar.

Cuando la clase A necesita una instancia de la Clase B, se dice que la clase B es una dependencia de la Clase A.

Y es importante saber que hay niveles de dependencias entre clases, y ese nivel se mide con otro concepto conocido como acoplamiento.

Acoplamiento

Este es un concepto de la Ingeniería de software.

Es el grado de interdependencia entre distintos módulos de un software.

Los acoplamientos en una clase pueden ser:

  • Fuerte → Se produce cuando en un método de la clase A se instancia la clase B. En general esto es malo porque no hay forma de saber desde fuera de la clase A cuáles son sus dependencias, así que cuando la instanciemos hay objetos de otras clases que se irán creando sin nosotros saber exactamente qué son ni tener control sobre ellos.
  • Débil → Es lo recomendado y es cuando le pasamos a una clase en su constructor todos los objetos que necesita. Precisamente esto se logra con la inyección de dependencias.

Manejo clásico de dependencias vs Inyección

Veamos un ejemplo hecho en .NET donde notamos la diferencia del manejo de dependencias en una aplicación.

El caso de uso que se maneja a continuación es un controlador llamado ProductsController el cual usa otra clase llamada ProductsRepository ya que el proyecto hace uso del patrón Repository aplicado de una forma didáctica.

En este gráfico se ilustran mejor las cosas:

Ahora veamos la diferencia cuando las dependencias se manejan mediante inyección:

Aquí tenemos que crear una interface llamada IRepository, hacer que la clase ProductsRepository la implemente y este objeto se inyecte en ProductsController.

De esta forma cuando instanciemos un objeto de tipo ProductsController sabemos exactamente qué objetos necesita y tenemos control sobre ellos. Esto es aplicar inyección de dependencias, y es una buena práctica.

Además todos las clases que implementen la interfaz IRepository podrían ser fácilmente inyectadas sin que el controlador cambie.

Por supuesto al aplicar el patrón Repository no se crea una clase Repository por cada entidad sino una sola clase Repository que utiliza Generics, es decir tendríamos la clase Repository<T> en vez de ProductsRepository, CustomerRepository y OrderRepository. Sin embargo aquí se ha desglosado de esta forma para fines didácticos.

Ahora la pelota está en tu cancha, prácticalo en un proyecto de dotnet.

Photo by Danial Igdery on Unsplash

Si esta entrada te ha parecido muy buena, compártela 🐿️🥳

Créditos foto portada: Photo by Zan on Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *