C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#服务生命周期:Singleton、Scoped、Transient

C#服务生命周期:Singleton、Scoped、Transient用法及说明

作者:bestcxx

文章介绍了三种服务生命周期:单例、作用域和瞬态,并讨论了如何在ASP.NETCore中使用这些生命周期管理服务,单例在应用程序生命周期中只有一个实例,作用域在每个请求中创建一个新实例,瞬态每次请求时创建一个新实例

概念:服务生命周期

单例 (Singleton) 

整个应用程序生命周期中只有一个实例被创建并共享。

如果你在依赖注入容器中将 AsyncPeriodicBackgroundWorkerBase 的实现注册为单例,那么这个任务将会是单例的。

作用域 (Scoped) 

每个请求一个新实例,通常在 Web 应用中使用。

如果你将它注册为作用域服务,每个作用域(例如 HTTP 请求)中会创建一个新的实例。

瞬态 (Transient) :

每次请求时都会创建一个新的实例。

如果注册为瞬态服务,每次获取该服务时都会得到一个新的实例。

如何确定任务是否为单例

假设你是在使用 ASP.NET Core 或类似的依赖注入框架,你可以通过如下方式注册到服务中来决定生命周期:

public void ConfigureServices(IServiceCollection services)
{
    // 将该任务注册为单例
    services.AddSingleton<MyBackgroundWorker>();
    
    // 或者作为一个作用域实例
    // services.AddScoped<MyBackgroundWorker>();

    // 或者作为一个瞬态实例
    // services.AddTransient<MyBackgroundWorker>();
}

对 Scoped 和 Transient 进一步辨析

在后端服务中(例如使用 ASP.NET Core 的应用程序),Scoped 和 Transient 是两种常用的服务生命周期管理方式,它们定义了服务实例的创建和使用方式。

了解它们之间的区别对于选择合适的服务生命周期管理有重要意义:

Scoped 生命周期

Scoped 服务在每个请求(或作用域,一个会话内)中被创建一次。一个请求期间同一服务的所有请求将获得相同的实例。

使用场景 :

适用性 :

Transient 生命周期

Transient 服务在每次请求它们的时候都会创建一个新的实例。即,每次获取服务都会得到一个新的实例。

使用场景 :

适用性:

选择哪种生命周期

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文