Introduction
In this article, we will see the difference between AddScoped vs AddTransient vs AddSingleton in .net core.
Why we require
- It defines the lifetime of object creation or a registration in the .net core with the help of Dependency Injection.
- The DI Container has to decide whether to return a new object of the service or consume an existing instance.
- The lifetime of the Service depends on how we instantiate the dependency.
- We define the lifetime when we register the service.
Three types of lifetime and registration options
- Scoped
- Transient
- Singleton
Scoped
- In this service, with every HTTP request, we get a new instance.
- The same instance is provided for the entire scope of that request.
- eg., if we have a couple of parameter in the controller, both object contains the same instance across the request
- This is a better option when you want to maintain a state within a request.
services.AddScoped<IAuthService,AuthService>();
Transient
- A new service instance is created for each object in the HTTP request.
- This is a good approach for the multithreading approach because both objects are independent of one another.
- The instance is created every time they will use more memory and resources and can have a negative impact on performance
- Utilize for the lightweight service with little or no state.
services.AddTransient<ICronJobService,CronJobService>();
Singleton
- Only one service instance was created throughout the lifetime.
- Reused the same instance in future, wherever the service is required
- Since it's a single lifetime service creation, memory leaks in these services will build up over time.
- Also, it has memory efficient as they are created once reused everywhere.
services.AddSingleton<ILoggingService, LoggingService>();
When to use which Service
Singleton approach => We can use this for logging service, feature flag(to on and off module while deployment), and email service
Scoped approach => This is a better option when you want to maintain a state within a request.
Transient approach => Use this approach for the lightweight service with little or no state.
What do you think?
I hope you enjoyed this article. I would like to have feedback from my readers.
Your valuable feedback, questions, or comments about this article are always welcome.