autofac 作用域_Autofac笔记-LifeTimeScope(控制作用域和服务生命周期)

本文介绍了Autofac中服务的生命周期和作用域,重点讲解了Lifetime Scope的概念,包括如何手动创建、管理生命周期范围,以及不同生命周期类型如瞬时、单例、Per Lifetime Scope的用法。还提到了如何通过InstancePerMatchingLifetimeScope进行标记生命周期范围,以及在生命周期范围内添加注册。
摘要由CSDN通过智能技术生成

服务的生命周期:

服务的生命周期是服务实例在程序中生存的时间。例如您“新建”一个实现IDisposable的对象,然后再对其进行调用Dispose()。

服务的范围:

服务范围是应用程序中可以与其他使用该服务的组件共享该服务的区域。例如,在你的应用程序中你可能有一个全局静态的单例 - 全局对象实例的“范围”将是整个应用程序。

Lifetime Scope(生命周期范围):

Autofac中生命周期范围的概念结合了这两个概念。实际上,生命周期范围等同于应用程序中的一个工作单元。一个工作单元可以在开始时开始一个生命周期范围,然后该工作单元所需的服务将从一个生命周期范围得到解析。当您解析服务时,Autofac跟踪已解析的一次性(可配置)组件。在工作单元结束时,您将释放相关的生命周期范围,Autofac将自动清理/释放解析后的服务。

务必始终从生命周期范围而不是根容器来解析服务。由于生命周期作用域的处置跟踪特性,如果您从容器(“根生命周期作用域”)中解析许多可丢弃组件,您可能会无意中给自己造成内存泄漏。根容器将一直保存对这些可丢弃组件的引用,直到其存在(通常是应用程序的生存期),因此它可以释放这些组件。

手动创建作用域:

您可以通过BeginLifetimeScope()从根容器开始在任何现有生存期范围上调用方法来创建生存期范围。生命周期范围是一次性的,并且它们跟踪组件的处置,因此请确保始终调用“ Dispose()”或将它们包装在“ using”语句中。

using(var scope = container.BeginLifetimeScope())

{

//从容器的一个子作用域解析服务

var service = scop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值