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




