服务的生命周期:
服务的生命周期是服务实例在程序中生存的时间。例如您“新建”一个实现IDisposable的对象,然后再对其进行调用Dispose()。
服务的范围:
服务范围是应用程序中可以与其他使用该服务的组件共享该服务的区域。例如,在你的应用程序中你可能有一个全局静态的单例 - 全局对象实例的“范围”将是整个应用程序。
Lifetime Scope(生命周期范围):
Autofac中生命周期范围的概念结合了这两个概念。实际上,生命周期范围等同于应用程序中的一个工作单元。一个工作单元可以在开始时开始一个生命周期范围,然后该工作单元所需的服务将从一个生命周期范围得到解析。当您解析服务时,Autofac跟踪已解析的一次性(可配置)组件。在工作单元结束时,您将释放相关的生命周期范围,Autofac将自动清理/释放解析后的服务。
务必始终从生命周期范围而不是根容器来解析服务。由于生命周期作用域的处置跟踪特性,如果您从容器(“根生命周期作用域”)中解析许多可丢弃组件,您可能会无意中给自己造成内存泄漏。根容器将一直保存对这些可丢弃组件的引用,直到其存在(通常是应用程序的生存期),因此它可以释放这些组件。
手动创建作用域:
您可以通过BeginLifetimeScope()从根容器开始在任何现有生存期范围上调用方法来创建生存期范围。生命周期范围是一次性的,并且它们跟踪组件的处置,因此请确保始终调用“ Dispose()”或将它们包装在“ using”语句中。
using(var scope = container.BeginLifetimeScope())
{
//从容器的一个子作用域解析服务
var service = scop