Como fazer injeção de dependência em um console application com .Net Core.
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”.
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 !!