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

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; } }

  

 

posted @ 2022-10-17 22:19  孤海飞雁  阅读(329)  评论(0)    收藏  举报