C#

3 mar, 2022

Dependency Injector usando .NET Core e a linguagem C# da Microsoft

Publicidade

Hoje eu vou falar um pouco sobre *Dependency Injector* usando .NET Core e a linguagem C# da Microsoft. Você pode usar qualquer ferramenta mas eu usei esses aqui:

– Ferramenta: Visual Studio

– Linguagem: C#

– Framework: .NETCore ou .NET 6

Explicando

Antigamente nós precisávamos criar instâncias como Class class = new Class() para acessar os métodos dentro da instância gerada como class.Method(parameter) mas agora a praticidade é melhor e o sistema sabe gerenciar as instâncias necessárias; e por isso agora você pode deixar preparado no sistema web, api ou desktop variáveis que vão ter a possibilidade de uso através do construtor e caso ela não seja usada, nenhum endereço de memória será criado, é criado apenas no momento de uso e é reutilizado caso use mais de uma vez.

Antigamente nós tinhamos sistemas que geravam instâncias new Class() que acabavam não sendo usadas e assim consumindo memória no servidor de forma desnecessária.

Como fazer?

Com o .NET Core e .NET 6, podemos usar dependency injector através da configuração do sistema e confirmando o uso através do construtor da classe. Eu quero dizer que, no momento que quiser acessar algum método da classe, basta usar o nome da variável colocada no construtor e acessar o método disponível.

É necessário ter uma interface da classe sempre.

Vamos para o código?

Na configuração do sistema você pode usar o AddScoped, o Singleton e o Transient por exemplo. Vou explicar de forma simples cada um deles:

– AddScoped: os objetos são os mesmos para cada objeto e para cada requisição

– Singleton: os objetos são os mesmos dentro da mesma requisição e são diferentes em diferentes chamadas

– Transient: os objetos são sempre diferentes, e uma nova instância é criada para todo o controlador e todo serviço.

Você escolhe baseado no que for melhor para você.

Dentro da classe Startup.cs do projeto, existe o método ConfigureServices(IServiceCollection services) e é aqui que vou adicionar as classes no meu escopo. Veja o código 1.1

Código 1.1 – Adicionando classe ao escopo

Eu adicionei aqui uma classe de serviço chamada **ClassService** mas eu posso colocar outras classes também como demonstro no código 1.2.

Código 1.2 – Adicionando várias classes no escopo

No código 1.2 eu já mostro quatro classes diferentes adicionadas no escopo e que podem ser usadas em qualquer momento no código. Uma instância será criada apenas quando o construtor da classe implementar. Vamos para o construtor?

Construtor da uma classe

Código 1.3 – Construtor da classe

Note que no código 1.3 eu adicionei uma variável privada com o nome da Interface adicionada no escopo, a IUserService. No construtor do método que é o nome da classe, eu adicionei uma variável e fiz a atribuição.

Para os próximos métodos, basta colocar o nome da variável e chamar os métodos disponíveis através dela, veja o código 1.4 de exemplo.

Código 1.4 – Chamando métodos.

Note que no código 1.4 eu criei um método que retorna uma lista de usuários e para chamar o método responsável não foi necessário criar uma instância para acessar o método GetAll(). 

Espero que tenha gostado e qualquer dúvida pode entrar em contato comigo pelo site Mauricio Junior.