细聊.Net Core中IServiceScope的工作方式( 十 )

实例的时候,即我们通常描述的作用域 。这个实例里包含了ResolvedServices属性和Disposables属性,分别保存当前作用域内即生命周期为ServiceLifetime.Scoped实例和实现了IDisposableIAsyncDisposable接口的实例 。

  • 使用GetService()方法在当前作用域内获取实例的时候,会根据服务注册时使用的生命周期判断是否加入到当前作用域里享元的实例 。其中单例来自于根容器,瞬时的每次都需要创建新的实例所以不需要保存,只有生命周期为ServiceLifetime.Scoped才保存 。瞬时的和Scope的对象创建出来的时候都会判断是否实现了IDisposableIAsyncDisposable接口 , 如果是则加入到Disposables属性的集合里用于释放 。
  • 当前作用域被释放的时候,即调用IServiceScope实例Dispose()相关方法的时候,会遍历Disposables集合里的对象进行Dispose相关方法调用,并不是回收托管到当前作用域内的对象,因为对象何时被回收取决于GC即垃圾回收机制 。
  • 推荐阅读