Dependency Injection en C#
Dependency Injection (DI) es un patrón de diseño que promueve el desacoplamiento al inyectar dependencias en lugar de crearlas directamente. En .NET, DI es una característica integrada que facilita la gestión del ciclo de vida de servicios, mejora la testabilidad y hace el código más flexible y mantenible.
Ejemplo sin DI
Sin DI, las clases crean sus propias dependencias, dificultando el testeo y el mantenimiento.
public class Servicio { public void Ejecutar() => Console.WriteLine("Servicio ejecutado"); } public class Controlador { private Servicio _servicio = new Servicio(); public void Procesar() { _servicio.Ejecutar(); } }
Aquí el controlador está fuertemente acoplado a Servicio
.
Inyección de dependencias vía constructor
Con DI, se inyecta la dependencia desde fuera.
public class Controlador { private readonly Servicio _servicio; public Controlador(Servicio servicio) { _servicio = servicio; } public void Procesar() { _servicio.Ejecutar(); } }
Esto permite sustituir Servicio
por un mock en pruebas.
Uso en ASP.NET Core
ASP.NET Core tiene un contenedor integrado para registrar dependencias.
builder.Services.AddTransient(); builder.Services.AddTransient ();
El framework resuelve automáticamente las dependencias al construir los objetos.
Buenas Prácticas
Usa interfaces para definir dependencias y facilitar el reemplazo. Registra los servicios con el ciclo de vida adecuado (Singleton, Scoped, Transient). Evita el servicio localizador (Service Locator). Inyecta solo lo necesario para evitar clases infladas.