IOC生命周期 -3种生命周期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
IServiceProvider 处理提供所需服务实例,有需要还会负责释放服务实例。具体操作为调试用实例的dispose或者异步dispose方法。
 
scoped和transient:当前Iservice provider 对象 调用dispose 方法,实例方法 dispose 也被调用,随之释放
 
singleton : 当根容器Iservice provider  dispose  被调用时,实例dispose  调用释放
 
 
 
每个作为注入的 IServiceProvider    都有两个列表来存储实例,(RealizedService,Disposable Service)
 
如果实例实现 idisposable 或者异步idisposable ,将会被添加到 Dispossable Service里
 
当IServiceProvider    被用于提供指定实例时,会提取对应IserviceDescriptor对象病的都对应的生命周期模式
 
singleton:根容器中RealizedService 有对应实例,则返回,没有则创建并添加RealizedService中,实现dispose或者异步dispose还会添加到Disposable Service中
 
scoped同上
 
transient:IServiceProvider    直接创建新实例,实现dispose或者异步dispose还会添加到Disposable Service中
 
非根容器的IServiceProvider,被范围 IserviceScope包裹,IServiceScope来自IDisposable,Dispose方法执行表示服务范围终结,IServiceProvider 生命周期终结
 
IserviceScope  Dispose被调用,当前范围的IServiceProvider  Dispose 也被调用,IServiceProvider 会先提取所有服务实例的Dispose 并调用,释放后清空RealizedService,Disposable Service
 
后续被GC回收
<br>源码
/// <summary>
/// The <see cref="System.IDisposable.Dispose"/> method ends the scope lifetime. Once Dispose
/// is called, any scoped services that have been resolved from
/// <see cref="Microsoft.Extensions.DependencyInjection.IServiceScope.ServiceProvider"/> will be
/// disposed.
/// </summary>
public interface IServiceScope : IDisposable
{
/// <summary>
/// The <see cref="System.IServiceProvider"/> used to resolve dependencies from the scope.
/// </summary>
IServiceProvider ServiceProvider { get; }
}

  

 

posted @   孤海飞雁  阅读(310)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示