NetCore自带DI容器的三种生命周期浅析

本文介绍了NetCore自带依赖注入框架的三种生命周期:Singleton、Transient和Scoped,详细讲解了它们的区别、应用场景以及生命周期嵌套注入的情况,并展示了各种情况下对象实例的行为。文章还提到了NetCore容器的不足和如何通过第三方库弥补这些不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NetCore自带DI容器的三种生命周期浅析
NetCore自带的依赖注入框架,分别由三种生命周期:单例Singleton/瞬时Transient/一次请求Scoped.接下来我将针对这三种生命周期简要的进行使用方法的解析,并不深入,希望各位大佬多多指教。

各生命周期的区别
Singleton:单例,整个程序启动后只存在唯一一份,如同单例模式一样
Transient:瞬时,每一个对象都是不一样的实例
前两者,都是从root容器中获取实例
Scoped:一次请求,即一次Http请求,获取的实例都是同一个,且是从子容器中获取,其实现原理也正是因为从子容器中获取的特点,而可以实现一次请求一个实例
下面是实例:
我自己写了三个接口以及他们对象的实现,取名自动对应上面三个生命周期
ITransientService TransientService
IScopedService ScopedService
ISingletonService SingletonService
分别在实现里面定义了一个变量i,通过这个变量i来观察他们的生命周期。

各生命周期接口实现代码截图如下:

注入各生命周期接口以及实现截图如下:


运行结果截图如下:
从运行的结果中可以看出,Transient对象每一个都是不同的,Scoped对象在一次请求中,无论获取多少个,都是同一个,Singleton对象整个程序中只有唯一一份。

各生命周期在实际开发中都用在什么场景
Singleton:单例,主要用在例如数据库,Options,IHostService(netcore自带后台服务跟随程序启动而启动)的注入这些,只需要一次实例化就永久保持,不需要每一次都去获取新的实例
Transient:这个就可以应用在比如领域驱动设计中的应用层Services中
Scoped:这个可以用在数据库的上下文中,事务处理等

同一接口实现或同一对象注入到不同的生命周期中会出现什么情况
这里说的是:如果我把ITransientService这个接口及其实现分别注入到三种生命周期中,这个时候会表现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhuhaiuser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值