Advertisement
Pipe
RSS
.NET Framework .NET C# VB.NET LINQ ASP.NET Web API REST SignalR Windows Forms WPF WCF RabbitMQ PHP SQL Server MySQL PostgreSQL MariaDB SQLite MongoDB ADO.NET ORM Entity Framework Dapper XML JSON HTML5 CSS3 Bootstrap JavaScript jQuery Angular React TypeScript NPM Blazor UI/UX Responsive Web Design Redis Elasticsearch GraphQL Grafana Agile Scrum Kanban Windows Server IIS PowerShell Active Directory TFS Azure Automation Software Reverse Engineering Performance Optimization Git Jira/Confluence CI/CD TeamCity SOLID KISS DRY YAGNI
Always will be ready notify the world about expectations as easy as possible: job change page

Exploring Transient, Scoped, and Singleton using .NET and C#

Created: Feb 10, 2023
Author: Abdelmajid BACO
Source: source
Views: 857

A Quick Guide to Transient, Scoped, and Singleton in C#.

In C#, the Transient, Scoped, and Singleton scopes are options for controlling the lifetime of objects which are created by dependency injection.

Transient

Transient objects are created each time they are requested. This means that if a Transient is injected into multiple consumers, each consumer will receive a separate instance of the object.

Scoped

Scoped objects are created once per request. This means that if a Scoped is injected into multiple consumers within the same request, they will all receive the same instance of this object. However, if the object is injected into multiple consumers in different requests, each request will receive its own instance of the object.

Singleton

Singleton objects are created the first time they are requested, and the same instance is used for all subsequent requests. This can be useful if you want to ensure that all consumers of a service are using the same instance of the object.

It is important to note that the Singleton should be used with caution. If for example the Singleton instance is modified simultaneously by multiple consumers. This can cause concurrency issues.

Code Example

Here is an example of using the scopes in a .NET project. This example shows how to register a service with .NET dependency injection system, and how to inject and use the service in a consumer class.

First, let’s define the service interface and its implementation:

public interface IMyService
{
    void DoWork();
}

public class MyService : IMyService
{
    public void DoWork()
    {
        Console.WriteLine("Doing work in MyService");
    }
}

Next, we can inject and use the IMyService service in a consumer class:

public class Consumer
{
    private readonly IMyService _myService;

    public Consumer(IMyService myService)
    {
        _myService = myService;
    }

    public void DoWork()
    {
        _myService.DoWork();
    }
}

Use Transient

We can register the Transient service in the ConfigureServices method of the Startup class:

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<IMyService, MyService>();
}

In this example, each time the Consumer class is created or the DoWork method is called, a new instance of the MyService class will be created and injected into the Consumer class.

Use Scoped

We can register the Scoped service in the ConfigureServices method of the Startup class:

public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IMyService, MyService>();
}

In this example, the MyService class will be created the first time it is requested within a given request, and the same instance will be used for all subsequent requests for the MyService class within the same request. If the Consumer class or the DoWork method is called in a different request, a new instance of the MyService class will be created and injected.

Use Singleton

We can register the Singleton scope service in the ConfigureServices method of the Startup class:

public void ConfigureServices(IServiceCollection services)
{
     services.AddSingleton<IMyService, MyService>();
}

In this example, the MyService class will be created the first time it is requested, and the same instance will be used for all subsequent requests for the MyService class.

Conclution

In general, it’s best to use the Transient scope whenever possible, and to use the Scoped or Singleton scopes only when necessary to maintain state or ensure that all consumers are using the same instance of a service.

Similar
May 2, 2023
Microservice architecture is one of the most discussed software architecture trends at the moment, and it has forever changed the way enterprise applications are built. Rather than the slow, complex monolithic approach of the past, developers and companies everywhere are...
Nov 7, 2020
Author: Rebai Hamida
IntroductionDuring this article, we will learn how to work with the microservice architecture patterns and Docker containers using the .NET Core 3 platform to build a distributed system.Monolithic vs Microservices ArchitectureBefore talking about Microservices, we need to understand the difference...
Apr 12, 2023
Author: Jaimin Soni
HTTP/3 is the latest version of the HTTP protocol, built on top of the QUIC transport protocol. It offers several advantages over its predecessors, including faster and more reliable connections, improved security, and reduced latency. In this article, we will...
May 12, 2023
Author: Love Sharma
Developing a robust, scalable, and efficient system can be daunting. However, understanding the key concepts and components can make the process more manageable. In this blog post, we’ll explore essential system design components such as DNS, load balancing, API Gateway,...
Send message
Email
Your name
*Message


© 1999–2023 WebDynamics
1980–... Sergey Drozdov
Area of interests: .NET | .NET Core | C# | ASP.NET | Windows Forms | WPF | Windows Phone | HTML5 | CSS3 | jQuery | AJAX | MS SQL Server | Transact-SQL | ADO.NET | Entity Framework | IIS | OOP | OOA | OOD | WCF | WPF | MSMQ | MVC | MVP | MVVM | Design Patterns | Enterprise Architecture | Scrum | Kanban
LinkedIn
GitHub profile