DEV Community

Cover image for Porque devemos utilizar a injeção de dependência no .NET ?
Paulo Walraven
Paulo Walraven

Posted on

Porque devemos utilizar a injeção de dependência no .NET ?

Quando estamos a desenvolver um sistema procuramos seguir as boas práticas do desenvolvimento, dentre elas, uma super importante é Single-responsibility principle (SRP), que afirma que cada módulo, classe ou função em um programa de computador deve ter responsabilidade sobre uma única parte da funcionalidade desse programa e deve encapsular essa parte.

Para que o SPR seja seguido é necessário a divisão do programa, essa divisão gera dependências entre as partes, e essa dependências podem ser problemáticas e devem ser evitadas pelos seguintes motivos:

  • Modificar a dependência gera impacto de quem depende dela.
  • Caso a dependência tenha outras dependências, quem utiliza terá que configurar tudo.
  • É trabalhoso testar a implementação.

A injeção de dependência vai tratar os problemas citados acima dessa maneira:

  • Utilizará uma interface ou classe base abstraindo a implementação da dependência.
  • As configurações dessas dependências podem ser feitas em um só lugar, no caso do .Net, ele oferece um contêiner de serviço interno, o IServiceProvider, geralmente registrado no arquivo Program.cs
  • A injeção do serviço acontecerá no constructor da classe que o necessitar, assim tendo a responsabilidade de criar e descartar quando não for mais necessário.

Ao atacar esses problemas com a injeção de dependências geramos o benefício do baixo acoplamento em nosso código, facilitando:

  • A extensão.
  • O teste.
  • A manutenção
  • O desenvolvimento de código paralelo, já que o código que necessitava da dependência agora depende de uma abstração e não será modificado sem necessidade.
  • Runtime binding (ligação em tempo de execução), é quando tomamos a decisão de executar algo em tempo de execução em vez de tempo de compilação.

Materiais de referência

https://docs.microsoft.com/pt-br/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-6.0
https://en.wikipedia.org/wiki/Single-responsibility_principle
https://app.pluralsight.com/library/courses/using-dependency-injection-on-ramp/table-of-contents

Top comments (0)