首页 > 其他分享 >IOC生命周期 -3种生命周期

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

时间:2022-10-17 22:22:15浏览次数:45  
标签:生命周期 Service Dispose 调用 dispose 实例 IServiceProvider IOC

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回收

源码 /// <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; } }

  

 

标签:生命周期,Service,Dispose,调用,dispose,实例,IServiceProvider,IOC
From: https://www.cnblogs.com/liujian1368928/p/16800801.html

相关文章

  • IOC
    IOCIOC的优劣势容器革新在java&php的开发过程中存在一个定律:使用对象之前,必须先创建,但是在Laravel&Spring框架中我们往往通过IOC容器直接获取,而无需事先创建它们,这种技......
  • IOC 生命周期-服务范围
    publicclassServicesPrpvoder:IServicesPrpvoder服务提供者可以利用IserviceScoprFactory创建一个服务范围IServiceScope对象IServicesScope的包含IServicesPrpvod......
  • 关于Spring的核心AOP和IOC理解
    spring概念轻量级的开源的J2EE框架。它是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用,可以让我们的企......
  • vue 的生命周期
    生命周期有4个阶段:创建阶段---挂载阶段---更新阶段---销毁阶段,每个阶段2个钩子函数;创建阶段 beforecreate创建一个空的vue实列对象,此时data和methods的数据......
  • winioctl.h(10326): [C4668] 没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用
    一般为Windows中的宏和UE4冲突所致在模块的xxx.Build.cs里面添加这个:bEnableUndefinedIdentifierWarnings=false;转自:https://blog.csdn.net/boonti/article/detail......
  • Java线程的生命周期
    新建运行阻塞等待计时等待中止在java.lang.Thread.State类中可以查看一个线程在给定的时间点只能处于一种状态面试题:一个线程两次调用start()方法会出现什么情况......
  • 【微信小程序】小程序应用和页面生命周期
    文章目录​​什么是生命周期​​​​生命周期的分类​​​​生命周期函数​​​​小程序的应用生命周期函数​​​​小程序的页面生命周期函数​​​​应用生命周期与页面生......
  • 【微信小程序】组件的生命周期及自定义组件
    文章目录​​组件的生命周期​​​​自定义组件的生命周期函数​​​​执行顺序​​​​组件常用的生命周期函数​​​​lifetimes节点​​​​组件所在页面的生命周期函数......
  • bug的生命周期
    4.1bug的分类①功能性bug:产品实现过程中,具体逻辑的实现错误(比如登录时,用户名要求邮箱登录,但是未验证邮箱的格式,有可能是前端或者后端某一方未验证导致的实现错误。如果是前......
  • QFramework v1.0 使用指南 架构篇:18. 内置工具:IOCContainer
    QFramework架构的模块注册与获取是通过IOCContainer实现的。IOC的意思是控制反转,即控制反转容器。其技术的本质很简单,本质就是一个字典,Key是Type,Value是Object,即......