Novidades do .NET 7: melhorias na injeção de dependências em API Controllers
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