Sobes.tech
Middle

O que é inversão de dependências no contexto do desenvolvimento em C#?

sobes.tech IA

Resposta da IA

O princípio de design segundo o qual os módulos de alto nível não devem depender dos módulos de baixo nível. Ambos devem depender de abstrações. As abstrações não devem depender dos detalhes. Os detalhes devem depender das abstrações.

Em C#, isso geralmente é implementado através de:

  • Uso de interfaces ou classes abstratas para definir contratos.
  • Injeção de dependências para fornecer implementações concretas através de construtores, propriedades ou métodos.
// Abstração
public interface IMessageSender
{
    void Send(string message);
}

// Módulo de baixo nível (detalhe)
public class EmailSender : IMessageSender
{
    public void Send(string message)
    {
        // Lógica de envio de email
    }
}

// Módulo de alto nível
public class NotificationManager
{
    private readonly IMessageSender _sender;

    // A dependência é injetada através do construtor (Injeção de Dependências)
    public NotificationManager(IMessageSender sender)
    {
        _sender = sender;
    }

    public void Notify(string message)
    {
        _sender.Send(message);
    }
}

Neste exemplo, NotificationManager (módulo de alto nível) depende da abstração IMessageSender, e não de uma implementação concreta EmailSender (módulo de baixo nível). Isso torna o NotificationManager mais flexível e testável, pois diferentes implementações de IMessageSender podem ser usadas.