DEV Community

👨‍💻 Lucas Silva
👨‍💻 Lucas Silva

Posted on

3 1

.Net - Scoped, transient e singleton

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.
Injeção dos serviços no arquivo Program.cs

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.Injeção dos serviços no construtor

Também injetei uma instância do serviço em cada método.
Injeção dos serviços 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):
Imagem mostra que uma única instância foi criada

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.

Mesma requisição:
Imagem mostra que uma única instância foi criada

Requisição diferente:
Imagem mostra que uma nova instância foi criada para uma segunda requisição

Transient

Ele é o mais custoso, pois se o serviço for chamado em diversas classes, cada uma delas terá uma instância diferente:
Imagem mostra que uma instância foi criada para cada chamada do serviço

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay