0

Usando Injeção de Dependência

Paulo Junior
Paulo Junior

Olá Devs!


Como sabemos o mundo do desenvolvimento de software é muito rápido e dinâmico, se tratando de programação orientada a objetos é mais frequente a criação de aplicações modulares, que visam códigos em estruturas mais organizadas com fácil manutenção e a implementação de testes, como consequência disso ocorre um baixo acoplamento e uma alta coesão para a redução de problemas nesses cenários.


O baixo acoplamento sugere que uma classe deva ter o mínimo de dependências possíveis, e a alta coesão representa o quão uma classe é especifica para desempenhar apenas uma tarefa bem feita dentro de um contexto, um recurso interessante para alcançar esses objetivos é o uso da Injeção de Dependência (DI - Dependency Injection).


Na utilização da injeção de dependência permite que a classe onde a dependência é injetada precise apenas saber da origem da implementação, nesse caso um contrato, que pode ser representando por uma interface ou classe abstrata, com isso a classe pode ser independente dos seus objetos.


Um exemplo prático


Criei um projeto .NET Core Console Application para exemplificar um uso simples da injeção de dependência, o objetivo dessa aplicação é bem simples e básico, exibir uma mensagem de boas vindas de uma empresa fictícia para um funcionário.


Foi criada uma interface chamada IAcolhimento com um método para recepcionar o funcionário, onde o seu nome é passado por parâmetro e retorna uma string com uma mensagem de boas-vindas.


namespace src.ExemploDI.interfaces
{
  public interface IAcolhimento
  {
    string RecepcaoFuncionario(string nome);
  }
}


Em seguida foi adicionada a classe Acolhimento para receber a implementação da interface IAcolhimento .


using src.ExemploDI.interfaces;

namespace src.ExemploDI.Classes
{
  public class Acolhimento : IAcolhimento
  {
    public string RecepcaoFuncionario(string nome)
    {
      return $"Olá {nome}, seja bem-vindo(a) a empresa XPTO!";
    }
  }
}


Também foi criada uma classe chamada Servico, responsável pela definição de sérvios da aplicação, está classe por sua vez precisa de uma referência a um objeto para a implementação da interface IAcolhimento, no qual é injetada em seu construtor, que é atribuída em uma propriedade privada no método MensagemRecepcao, que tem a função de realizar uma chamada a ao método RecepcaoPessoa.


using src.ExemploDI.interfaces;

namespace src.ExemploDI.Classes
{
  public class Servico
  {
    private readonly IAcolhimento _acolhimento;

    public Servico(IAcolhimento acolhimento)
    {
      _acolhimento = acolhimento;
    }

    public string MensagemRecepcao(string nome)
    {
      return _acolhimento.RecepcaoFuncionario(nome);
    }
  }
}


Neste cenário a classe Servico está fazendo uso do princípio da Inversão de Controle (IoC - Inversion of Control) no qual vai exercer a implementação da interface IAcolhimento de forma externa, ou seja, ocorrendo uma inversão de controle, isso faz com que a classe Servico não tenha uma dependência com a classe Acolhimento.


Na classe Program é passada uma implementação da interface IAcolhimento para o construtor da classe Servico, com isso realizando uma injeção de dependência.


using System;
using src.ExemploDI.Classes;

namespace ExemploDI
{
  class Program
  {
    static void Main(string[] args)
    {
      var servico = new Servico(new Acolhimento());
      var resultado = servico.MensagemRecepcao("Paulo");

      Console.WriteLine(resultado);
    }
  }
}


Resultado:


Olá Paulo, seja bem-vindo(a) a empresa XPTO!


Observação: em aplicações reais existem cenários onde se faz o uso de muitas interfaces, para se ter um gerenciamento dessas implementações é feito o uso de um recurso chamado de Container de Injeção de Dependência.


Fonte:

https://docs.microsoft.com/pt-br/dotnet/core/extensions/dependency-injection


Repositório da aplicação:

https://github.com/PauloAlves8039/dotnet-core-injecao-de-dependencia


Desde já, agradeço a todos que leram esse artigo.

0
0

Comentários (2)

0
Paulo Junior

Paulo Junior

24/05/2021 14:08

Obrigado Lilian!

1
Lilian Paula

Lilian Paula

22/05/2021 15:58

Valeu Paulo, belo artigo!

None

Brasil