Injeção de dependência

Autor : Antonio Carlos Ferreira de Azevedo
Postado em : 09/03/2023


Injeção de dependência

O que é a injeção de dependência em C#?

Em C#, a injeção de dependência é uma técnica utilizada para permitir que uma classe dependente receba suas dependências por meio de um construtor, propriedade ou método. Isso significa que a classe dependente não precisa criar as suas dependências, mas sim recebê-las de uma outra classe. A injeção de dependência é implementada por meio de um contêiner de injeção de dependência, que é responsável por gerenciar a criação e a entrega das dependências para as classes que precisam delas.

Por que usar a injeção de dependência em C#?

A injeção de dependência em C# traz muitos benefícios para um projeto de software, incluindo:

  1. Redução do acoplamento: Com a injeção de dependência, as classes dependem apenas de interfaces, e não de implementações concretas. Isso significa que as classes podem ser alteradas sem afetar as outras classes do projeto.

  2. Maior testabilidade: Com a injeção de dependência, é possível injetar objetos de teste em uma classe dependente, o que torna mais fácil testar essa classe isoladamente.

  3. Modularidade: A injeção de dependência torna o projeto mais modular, pois as classes podem ser facilmente substituídas ou removidas sem afetar o restante do projeto.

Como implementar a injeção de dependência em C# ?

A implementação da injeção de dependência em C# envolve as seguintes etapas:

  1. Definir as interfaces: É necessário definir as interfaces que serão utilizadas pelas classes dependentes.

  2. Implementar as classes: As classes que implementam as interfaces definidas anteriormente devem ser implementadas.

  3. Configurar o contêiner de injeção de dependência: É necessário configurar o contêiner de injeção de dependência com as classes que implementam as interfaces definidas anteriormente.

  4. Injetar as dependências: As dependências devem ser injetadas nas classes dependentes por meio de um construtor, propriedade ou método.

Vamos agora ver um exemplo prático de como implementar a injeção de dependência em C#.

Exemplo prático de injeção de dependência em C

Suponha que temos uma classe "Calculadora" que depende de uma outra classe "Logger" para registrar os cálculos realizados. Em vez de criar uma instância da classe "Logger" dentro da classe "Calculadora", podemos injetar a dependência por meio de um construtor.

Vamos ver como ficaria a implementação da classe "Calculadora":

public class Calculadora
{
    private readonly ILogger _logger;

    public Calculadora(ILogger logger)
    {
        _logger = logger;
    }

    public int Soma(int a, int b)
    {
        _logger.Log($"Calculando a soma de {


Implementando a injeção de dependência em C#, basta seguir os seguintes passos:

1) Crie uma interface para a dependência que deseja injetar. Por exemplo:

public interface IExemploDependencia
{
    void MetodoExemplo();
}

2) Crie uma classe que implemente essa interface. Por exemplo:

public class ExemploDependencia : IExemploDependencia
{
    public void MetodoExemplo()
    {
        Console.WriteLine("Método exemplo da dependência foi chamado.");
    }
}

3) Na classe que depende da dependência, adicione um construtor que aceite a interface como um parâmetro. Por exemplo:

public class ClasseDependente
{
    private readonly IExemploDependencia _exemploDependencia;

    public ClasseDependente(IExemploDependencia exemploDependencia)
    {
        _exemploDependencia = exemploDependencia;
    }

    public void MetodoQueUsaDependencia()
    {
        _exemploDependencia.MetodoExemplo();
    }
}

4) Configure o container de injeção de dependência para fornecer a implementação da dependência quando a interface for solicitada. Por exemplo, usando o contêiner nativo do .NET, você pode fazer o seguinte:

var container = new Container();
container.Register<IExemploDependencia, ExemploDependencia>();

5) Em seguida, você pode usar o contêiner para criar uma instância da classe que depende da dependência e a dependência será injetada automaticamente. Por exemplo:

var classeDependente = container.GetInstance<ClasseDependente>();
classeDependente.MetodoQueUsaDependencia(); // Isso deve imprimir "Método exemplo da dependência foi chamado." no console.


O importante é entender o conceito básico, escolher a melhor abordagem. Lembre-se de que existem várias maneiras de implementar a injeção de depenência em C#.



Links Relacionados



Comentários