You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ASP.NET Core中未显式定义时服务的默认生存期是什么?

ASP.NET Core 未显式定义服务时的默认生存期

嘿,这个问题问得相当实用!很多刚上手ASP.NET Core依赖注入的开发者都会碰到这个疑问,我来给你明确解答:

在ASP.NET Core的依赖注入系统中,当你未显式指定服务生存期(比如使用Add<TService, TImplementation>()或者通过工厂方法Add<TService>(Func<IServiceProvider, TService>)这类未带生存期标识的注册方式)时,默认的服务生存期是 Transient

举个代码例子,下面这行注册代码就会默认把MyService以Transient生存期注册为IMyService的实现:

services.Add<IMyService, MyService>();

为了让你更清楚默认行为的意义,再快速回顾下三种核心生存期的区别:

  • Transient:每次从服务容器中获取服务时都会创建一个全新的实例,适合轻量级、无状态的服务(比如一些工具类服务)
  • Scoped:在同一个请求范围内,多次获取服务都会得到同一个实例;不同请求则会创建新实例,适合和请求上下文绑定的服务
  • Singleton:整个应用程序生命周期内只会创建一个实例,所有请求共享这个实例,适合全局共享的状态或资源

如果你的服务需要Transient之外的生存期,一定要记得显式调用对应的扩展方法(比如AddScoped<IMyService, MyService>()或者AddSingleton<IMyService, MyService>()),避免默认行为不符合你的业务预期。

内容的提问来源于stack exchange,提问作者Gary Brunton

火山引擎 最新活动