CSharp Cheat sheet

Tu guía rápida para programar en C#

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.

Ver también

Documentación oficial de Microsoft

Ver más en Microsoft Docs