.NET 6 + Injeção de Dependências: exemplo de implementação em uma Console App

Renato Groffe
4 min readMay 2, 2022

Neste novo artigo apresento um exemplo de como implementar o uso de injeção de dependências em Console Applications criadas com .NET 6. Este tipo de aplicação ainda é bastante utilizado, sobretudo com tarefas pré-agendadas (como CronJobs no Kubernetes) e rotinas de processamento voltadas a inúmeras necessidades.

O exemplo que tomo como base aqui já foi disponibilizado no GitHub:

https://github.com/renatogroffe/DotNet6-ConsoleApp-DI-IntegratedTerminal-FluentMigrator-SqlServer_Produtos

Caso ache útil a solução, peço por favor um star ⭐️ no repositório apoiando. Fica também o convite para que você me siga lá no GitHub!

Esta aplicação para criação de uma tabela de produtos e (carregamento de dados nesta última) faz uso do projeto Fluent Migrator com SQL Server, uma alternativa open source para a implementação + execução de Migrations e com suporte a diversos bancos de dados. Já abordei inclusive a utilização do Fluent Migrator em outro artigo:

.NET 5 + Dapper: exemplos de implementação

Na listagem a seguir está o código para o arquivo Program.cs:

  • Dependências a serem injetadas e até mesmo serviços como logging (e o próprio Fluent Migrator) dependem de uma instância de ServiceCollection (namespace Microsoft.Extensions.DependencyInjection);
  • Temos aqui exemplos de uso de métodos como AddSingleton e AddTransient (linhas 54 e 65) configurando dependências a serem resolvidas ao longo do código;
  • Finalmente a instrução da linha 67 irá proceder com a geração de uma instância do tipo ServiceProvider (namespace Microsoft.Extensions.DependencyInjection), que cuidará da criação de um objeto ConsoleApp (em que serão resolvidas dependências no construtor da classe correspondente) e acionando o método Run para iniciar a execução da aplicação console.

Já a próxima listagem traz o código que define a classe ConsoleApp, com o construtor que receberá instâncias via injeção de dependências (a partir da linha 11):

Já a próxima listagem traz o código que define a classe ConsoleApp, com o construtor que receberá instâncias via injeção de dependências (a partir da linha 11):

As Migrations especificadas na classe DadosProdutosMigration_v1 também contam com um construtor cuja dependência (uma instância de LoadDataConfigurations) será resolvida por meio de injeção:

Observando a execução da aplicação a partir da geração do ServiceProvider (linha 67 de Program.cs):

Notaremos que as dependências representadas por instâncias de ILogger<ConsoleApp> e IMigrationRunner serão injetadas no construtor de ConsoleApp:

Clique nesta imagem para visualizar com uma melhor resolução

Que o objeto de log associado a _logger via injeção de dependências no tipo ConsoleApp emite mensagens corretamente:

Clique nesta imagem para visualizar com uma melhor resolução

E também que as Migrations representadas pela classe DadosProdutosMigration_v1 acontecerá automaticamente (via objeto _migrationRunner):

Clique nesta imagem para visualizar com uma melhor resolução

E finalmente a próxima imagem mostra a execução das Migrations ocorreu com sucesso, confirmando assim que as dependências foram corretamente injetadas ao longo da execução da aplicação:

E encerro este artigo com um convite…

Segunda 02/05 às 21:00 horário de Brasília — teremos mais um evento online e gratuito no canal Canal .NET.

Esta live trará dicas, truques e alternativas úteis para o desenvolvimento Back-End e de APIs REST com .NET 6, C#, ASP.NET Core e Azure Functions. Ao longo da apresentação será coberto o uso de diferentes frameworks, serviços na nuvem, mensageria e boas práticas de forma a facilitar e tornar mais dinâmica a implementação de soluções baseadas na plataforma .NET no seu dia a dia.

Teremos também algumas novidades do .NET 7, C# 11 e do Visual Studio 2022 demonstradas na prática!

Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:

https://bit.ly/live-backend-dotnet-mai-2022

--

--

Renato Groffe

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