Introdução
Nesta live, os apresentadores discutem quando o modo simples de injeção de dependências pode ser limitante e como isso se alinha com as sugestões de boas práticas. O vídeo mergulha em exemplos práticos no .NET 9, mostrando cenários com lifetimes de DI (singleton, scoped e transient), uso de interfaces, e estratégias para evitar duplicação de código ao gerenciar várias dependências.
Resumo
- O conteúdo começa com um exemplo baseado em controller e OpenAPI no .NET 9, apresentando A (singleton) e B (transient) com interfaces correspondentes. A ideia é mostrar que, em muitos cenários, injetar dependência via interface facilita a troca de implementação, mantendo o código flexível.
- Em seguida, é discutido um caso prático de impressão fiscal (Daruma, Bematec) para ilustrar como a DI com interfaces pode facilitar a gestão de diferentes dispositivos sem duplicar lógica, bastando configurar a dependência pela implementação correta.
- O apresentador aborda a duplicação de código quando várias dependências compartilham a mesma interface. A solução proposta envolve usar interfaces distintas (ou chaves/identificadores) para diferenciar dependências, evitando que A e B fiquem indistinguíveis.
- Apresenta a novidade do .NET 9 sobre a injeção com chaves/identificadores (implementation factory) e a possibilidade de resolver dependências com base em uma chave específica, reduzindo duplicação de código em cenários com múltiplas implementações.
- Por fim, o conteúdo mostra o comportamento dos lifetimes ao rodar chamadas: singleton mantém a mesma instância durante o ciclo de vida da aplicação, scoped varia por requisição e transient cria novas instâncias a cada envio. O vídeo também aponta temas para as próximas lives (console apps, Azure Functions – Isolated, Worker Service) e comenta ferramentas de teste de APIs (Postman vs Bruno) e práticas de HTTP Client.
Opinião e Análise
Sem opiniões explícitas no vídeo.
Insights e Pontos Fortes
- Demonstra como evitar duplicação de código no DI ao usar chaves/identificadores para distinguir dependências que compartilham a mesma interface.
- Ilustra a diferença prática entre lifetimes (Singleton, Scoped, Transient) e como afetam o comportamento entre requisições diferentes.
- Apresenta a ideia de using implementation factories e delegates para inicializar dependências com lógica de construção personalizada, mantendo a configuração simples e legível.
- Mostra a utilidade de usar interfaces para facilitar a troca de implementações (ex.: impressoras fiscais) sem mexer no código consumidor, reforçando o princípio de dependências por abstração.
- Aborda cenários do mundo real (OpenAPI, Swagger, testabilidade, minimal APIs) e comenta implicações de ferramentas de API (Postman vs Bruno) em termos de segurança e práticas de desenvolvimento.