Novidades do .NET 7: melhorias na injeção de dependências em API Controllers

Renato Groffe
2 min readMar 20, 2022

--

Nesta última semana (14/03, segunda) o Preview 2 do .NET 7 foi disponibilizado, com um anúncio no blog oficial da plataforma .NET descrevendo algumas das novidades:

Como não poderia deixar de ser, novos recursos para o ASP.NET Core também foram liberados para testes:

E por falar em ASP.NET Core, uma das melhorias envolve o mecanismo de injeção de dependências em Controllers definidos em projetos do tipo Web API.

Partindo da definição dos tipos InfoInicializacao e ResultadoTeste:

Configurei a injeção de uma instância de InfoInicializacao como um Singleton no arquivo Program.cs (linhas 6 a 10):

Chegando à implementação de uma API de testes representada pela classe TestesController, podemos observar a dependência para com InfoInicializacao sendo resolvida de 2 maneiras:

  • Através do uso do atributo FromServices no método GetFromServices, comportamento este existente desde os primórdios do ASP.NET Core;
  • E a novidade na definição do método GetWithoutFromServices, em que a dependência para com o tipo InfoInicializacao será resolvida por inferência pelo próprio ASP.NET Core e dispensando o uso do atributo FromServices.

Um teste de acesso à Action GetFromServices trará como resultado (com os valores originais de InfoInicializacao em vermelho):

E na sequência acessando a Action GetWithoutFromServices notaremos que os mesmos valores de ResultadoTeste foram obtidos a partir da resolução da dependência para com InfoInicializacao, desta vez sem o uso do atributo FromServices:

Este comportamento padrão pode ser desabilitado no arquivo Program.cs, associando-se para isto o valor true à propriedade DisableImplicitFromServicesParameters (linhas 14 a 17):

Este projeto já foi disponibilizado no GitHub:

https://github.com/renatogroffe/ASPNETCore7_Preview2-REST_API-InjDependencias

--

--

Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker