Autofac - 生命周期范围是否使用根范围实例(如果存在)?

时间:2016-11-03 09:13:24

标签: autofac

这可能是一个noob问题。

假设我需要在Web请求处理中解析某些接口,例如IFunctional,该接口在autofac配置中作为每个生命周期范围的实例注册。但在我这样做之前,我已经解决了IService,它被注册为单个实例并且还依赖于IFunctional。因此,IService已在根范围内得到解决,并且IFunctional也已在根范围内得到解决。现在尝试解决IFunctional,例如,Web请求处理,它会:

  1. 在“网络请求范围”中创建新的IFunctional实例
  2. 在范围树中查找IFunctional的实例,并在根范围内找到一个并使用该范围?
  3. 对我而言,第一种选择更有意义,但我宁愿确定。谢谢!

1 个答案:

答案 0 :(得分:0)

在你的stuation中: IService(单身)具有IFunctional(每个生命周期)。所以这个IFunctional对象将与IService一起使用。但其他类不会使用此IFunctional。简而言之:此ISunctional将仅供IService使用。

请求启动时,也会启动新的请求生存期范围。因此,当您尝试在此范围内解析/获取IFunctional对象时,它会检查我的范围内是否有任何IFunctional对象?。如果没有,它会创建一个新的。否则它使用在此范围内的IFunctional,而不是在其他范围内,即使在根目录中也是如此(因为IFunctional不是单例)。

因此,将会发生第一个选项