简单注入器:自动构造函数注入递归

本文关键字:构造函数 注入 递归 注入器 简单 | 更新日期: 2023-09-27 18:03:20

我试图了解在SimpleInjector.NET中如何自动构造函数注入。我的工作源代码来自code Project文章(v1.5.0.12199)。

我已经看了容器的GetInstance()代码和InstanceProducer的GetInstance()代码,但我没有看到任何递归调用。

有人能指出自动构造函数注入的递归发生在哪里吗?

简单注入器:自动构造函数注入递归

从v1.5版本到当前的v2.5框架,容器中有很多变化。在旧版本中,事情是如何完成的,我不记得了,但这就是当前v2.5版本中发生的事情(当然,将来可能会发生变化,因为它们是实现细节)。

如果您想查看发生这种情况的方法,您需要转到Registration类的私有BuildConstructorParameters方法(再次注意,我在这里谈论的是v2.5源代码)。该方法调用Type.GetParameters并迭代它们,并为参数的表达式请求配置的IConstructorInjectionBehavior类型。DefaultConstructorInjectionBehavior将调用Container.GetRegistration来获得相应参数的InstanceProducer,从而结束循环。

因此,完整的堆栈跟踪将是这样的(按自顶向下的顺序):
  • 容器。GetInstance
  • InstanceProducer。GetInstance
  • InstanceProducer。BuildInstanceCreator
  • InstanceProducer。BuildExpressionInternal
  • 登记。BuildExpression
  • 登记。BuildTransientExpression
  • 登记。BuildNewExpression
  • 登记。BuildConstructorParameters
  • 登记。BuildParameterExpressionFor
  • DefaultConstructorInjectionBehavior。BuildParameterExpression
  • InstanceProducer。BuildExpression
  • InstanceProducer。BuildExpressionInternal <-递归从这里开始
  • 登记。BuildExpression