Como fazer injeção de dependência em um console application com .Net Core.

Marcio Nizzola
3 min readAug 4, 2020

--

No artigo anterior (O que é injeção de dependência), expliquei como funcionam os princípios de implementação da injeção de dependência na linguagem .Net Core e seus conceitos.

Agora vamos botar a mão na massa e implementar na prática este conceito. Para isto, vou utilizar um Console Application criado com .NET Core.

Para começar, vamos criar um projeto base do tipo “Console”:

Teremos que adicionar a biblioteca:

Microsoft.Extensions.DependencyInjection

Isto pode ser feito através do Nuget Package manager ou através de console.

Para exemplificar o conceito, utilizarei uma aplicação de exemplo de agenda onde é implementada uma classe de serviço e outra classe de repositório, com as suas devidas interfaces.

A interface e a sua classe para serviços são: IEventoService e EventoService

e as de repositório são: IEventoRepository e EventoRepository.

(para maiores detalhes, vejam no artigo: “Utilizando Entity Framework In-Memory com C#”)

A parte importante é a montagem da inicialização da nossa aplicação, que será configurada no arquivo “Program.cs”.

program.cs

Podemos ver na linha 16, que é criada uma “ServiceCollection” que é um objeto que armazena a coleção de serviços.

No método ConfigureServices, fazemos a inserção das interfaces e suas correspondências para que possam ser fornecidas quando a aplicação solicitar.

A idéia principal da injeção de dependência, é que sempre que solicitarmos um objeto através da menção da sua interface no construtor de uma classe, será inserida uma instância do Objeto, já que a interface é apenas um molde para criação de objetos.

Neste caso na linha 29, estamos inserindo a configuração para as solicitações de objetos herdados da interface “IEventoService” com o comando “AddScoped”, existem vários ciclos de vida para objetos criados pela injeção de dependências, utilizamos o “AddScoped” pois ele irá criar uma instância da classe única por execução da aplicação, evitando maior consumo de memória.

Da mesma forma, na linha 30 é feita a configuração para “IEventoRepository” com a correspondência para a classe “EventoRepository”.

pronto ! a configuração está realizada.

Existem 2 formas de utilizarmos na nossa aplicação “console” um objeto injetado.

A primeira é através da solicitação direta para o “ServiceProvider” (provedor de serviços) conforme é mostrado na figura abaixo.

Ou como foi feita na classe “EventoService” em seu construtor, onde a aplicação irá injetar no construtor da classe a instância contida no “serviceProvider” de forma autônoma.

e assim poderemos consumir normalmente o serviço.

Caso queira baixar o exemplo e ver como foi feita a implementação segue o link do meu github

Gostou do artigo? clique no ícone👏e me siga para ver as próximas publicações !!

--

--

Marcio Nizzola
Marcio Nizzola

Written by Marcio Nizzola

Microsoft MVP | Software Architect na CI&T | Prof. da Etec Itu | Membro Fundador da Comunidade Itu Developers.

Responses (1)