Vejo bastante gente com dificuldade em entender a diferença entre os principais tipos de lifecycle quando falamos sobre injeção de dependência em .net. Criei um exemplo no GitHub e vou falar sobre ele.
Basicamente criei 3 serviços bastante simples e parecidos (apenas para fins didáticos) e os injetei utilizando AddSingleton, AddScoped e AddTransient.
Esses serviços só possuem uma propriedade, o Id, que é criada no momento da instanciação.
Criei um controller e injetei os serviços por construtor.
Também injetei uma instância do serviço em cada método.
Singleton
O serviço é criado uma única vez e a mesma instância é passada para todas as chamadas dele. Veja que o id, criado no momento da instanciação, foi o mesmo (e continua sendo o mesmo independente da requisição):
Scoped
Uma única instância é criada por requisição. Então se o serviço for chamado em vários lugares em uma única requisição, a mesma instância será passada. Outras instâncias serão criadas para as próximas requisições.
Transient
Ele é o mais custoso, pois se o serviço for chamado em diversas classes, cada uma delas terá uma instância diferente:
Top comments (0)