image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF

JM

Jaison Machado01/10/2022 18:19
Compartilhe

Injeção de Dependência e o Life Time Services - Tempo de Serviço ou tempo de vida útil do serviço

  • #.NET Core

Injeção de Dependência e o 

Life Time Services - Tempo de Serviço ou tempo de vida útil do serviço  

  

 

 

Em primeira mão torno a cumprimentar o resilientes e curiosos colegas dos cursos da Digital Innovation One, que não perdem uma oportunidade em aprofundar conhecimentos e também difundi-los, compartilhando os prazeres da aprendizagem constante. Nesse breve artigo, iremos abordar um tema que tem intima importância, uma vez que complementa os assuntos abordados nos bootcamps de .Net: os métodos AddTransient, AddScoped e AddSingleton, suas relações com a injeção de dependência e porque escolher um dentre os três métodos disponíveis. 

Já sabemos que Inversão de Controle - IoC, e Princípio da Injeção de Dependência - DIP, são princípios e como a semântica nos leva a deduzir, fornecem as diretrizes para a implementação porém não fornecem os detalhes para isso. A Injeção de Dependência (DI) por sua vez é um padrão que complementa os princípios fornecendo uma solução para a implementação dos mesmos. O IoC Conteiner – contêiner de injeção de dependência, é um framework que utilizado para realizar a injeção de dependência na aplicação. 

A plataforma dotNet possui um contêiner nativo definido em Microsoft.Extensions.DependecyInjection, o IServiceProvider. Contudo, existem outros contêineres que podem ser usados na plataforma .Net: Simple Injector, Autofac, Ninject, Spring.Net, Unity, Castle Windsor entre outros. O .NET dá suporte ao padrão de design de software de DI (injeção de dependência), que é uma técnica para aplicar a IoC (inversão de controle) entre classes e suas dependências. A injeção de dependência no .NET é uma parte interna da estrutura, juntamente com a configuração, o registro em log e o padrão de opções. 

Quando utilizamos o serviço de um contêiner precisamos definir por quanto tempo o manteremos em memória. Isso quer dizer que iremos definir por quanto tempo o objeto criado no contêiner deve estar disponível em memória. A IServiceColection especifica o contrato para uma coleção de descritores de serviço, sendo que o tempo de vida útil do objeto será definido pelo método de extensão escolhido ao registrarmos o serviço:  

  • Transiente 

São criados a cada solicitação, ou seja cada solicitação irá injetar o serviço em uma classe e será criada uma nova instância do serviço. Seu registro se dá pelo método AddTransiente e sua indicação abrange serviços leves e sem estado, ou quando não fazemos ideia do tempo de vida que necessitaremos. 

builder.Services.AddTransiente<Interface,ClassedequeImplementaInterface>()  

  • Scoped 

Indicado para aplicações Web, são criados uma vez por solicitação do cliente – criados com a request, e são descartados após o response. Quando a injeção de dependência é utilizada em muitos lugares em uma request será aproveitada a mesma injeção de dependência sendo utilizada a mesma instância do objeto, fazendo referência à mesma alocação de memória. Seu registro se dá pelo método AddScoped 

builder.Services.AddScoped <Interface, ClassedequeImplementaInterface>()

  • Singleton 

O serviço é criado uma única vez durante a vida útil do aplicativo e usa a mesma instância para todo o aplicativo. Seu registro se dá pelo método AddSingleton: 

builder.Services.AddSingleton<Interface, ClassedequeImplementaInterface>(). 

E assim, compreendemos que na plataforma .Net a escolha de qual método utilizar na implementação do padrão de Dependência de Injeção (AddTransiente, AddScoped ou AddSingleton), estará sujeito à análise do ambiente em que se utilizará, tendo em vista possível comprometimento de memória, bem como a ausência de certeza de por quanto tempo a aplicação necessitará da instância do objeto. 

Espero que esse artigo instigue os colegas de jornada de aprendizagem mais do que resolva suas dúvidas, mas que também lance uma luz sobre o tema abordado, sem ter aqui, a pretensão de exauri-lo. Muito obrigado pela leitura. 

 

 

Referência: 

Injeção de dependência no .NET. Disponível em: https://learn.microsoft.com/pt-br/dotnet/core/extensions/dependency-injection. Acessado em 01/10/2022. 

NET - Injeção de dependência : tempo de vida dos serviços. MACORATTI, José Carlos. Vídeo aula. Disponível em: https://youtu.be/-ZVrWXsvjUc 

Compartilhe
Comentários (2)
Laio Silva
Laio Silva - 03/10/2022 10:49

Olá, tudo bom?

Bacana seu artigo.

Qual sua visão sobre controle de qualidade?

Por favor, posso contar com seu voto no artigo abaixo?

DIO| Codifique o seu futuro global agora

Qual sua opinião? Algo a acrescentar?

Desde já, te agradeço!

Belisnalva Jesus
Belisnalva Jesus - 01/10/2022 21:33

Muito legal o seu artigo Jaison!!