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 ; } } |
分类:
Net6依赖注入
, C#/NetCore
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下