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