C# Asp.net Core 中的 AddSingleton、AddScoped 和 Add Transient 分别是什么?
csharpserver side programmingprogramming更新于 2025/9/30 12:07:17
在 Startup.cs 中注册依赖项有三种方式,分别是 AddSingleton、AddScoped 和 AddTransient。
添加单例
当我们将一个类型注册为单例时,在整个应用程序中,对于每个请求,只有一个实例可用。
这类似于拥有一个静态对象。
该实例是为第一个请求创建的,并且在整个应用程序中以及每个后续请求中都可用。
public void configureservices(IServiceCollection services){
services.AddSingleton<ILog,Logger>()
}
添加 Scoped
当我们将类型注册为 Scoped 时,每个请求都会在整个应用程序中提供一个实例。当新的请求到来时,会创建新的实例。添加 Scoped 指定每个请求只提供一个对象。
public void configureservices(IServiceCollection services){
services.AddScoped<ILog,Logger>()
}
添加 Transient
当我们将类型注册为 Transient 时,每次都会创建一个新实例。 Transient 为每个服务/控制器以及每个请求和每个用户创建新实例。
public void configureServices(IServiceCollection services){
services.AddTransient<ILog,Logger>()
}
| 参数 | 添加单例 | 添加作用域 | 添加瞬态 |
|---|---|---|---|
| 实例 | 每个请求/每个用户相同。 | 每个请求一个。 | 每次都不同。 |
| 已处置 | 应用关闭 | 请求结束 | 请求结束 |
| 用于 | 需要单例实现时。 | 每个用户行为不同的应用程序。 | 轻量级无状态服务。 |

