Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简单注入器:自动构造函数注入递归_C#_.net_Dependency Injection_Ioc Container_Simple Injector - Fatal编程技术网

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

C# 简单注入器:自动构造函数注入递归,c#,.net,dependency-injection,ioc-container,simple-injector,C#,.net,Dependency Injection,Ioc Container,Simple Injector,我试图了解SimpleInjector.NET中自动构造函数注入是如何完成的。我的工作源代码来自代码项目文章(v1.5.0.12199) 我查看了容器的GetInstance()代码和InstanceProducer的GetInstance()代码,但没有看到任何递归调用 有人能指出自动构造函数注入的递归发生在哪里吗?从v1.5版到当前v2.5版框架,容器中有很多变化。我记不起旧版本到底是如何完成的,但这就是当前v2.5版本中发生的情况(当然,将来可能会发生变化,因为它们是实现细节) 如果您想查

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

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


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

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

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

因此,完整的堆栈跟踪如下(按自上而下的顺序):

  • Container.GetInstance
  • InstanceProducer.GetInstance
  • InstanceProducer.BuildInstanceCreator
  • InstanceProducer.buildExpression内部
  • 注册.BuildExpression
  • Registration.BuildTransientExpression
  • Registration.BuildNewExpression
  • 注册.BuildConstructorParameters
  • Registration.BuildParameterExpressionFor
  • DefaultConstructorInjectionBehavior.BuildParameterExpression
  • InstanceProducer.BuildExpression

  • InstanceProducer.buildExpression感谢您的回复。v2.5似乎比v1.5更复杂,但我将尝试逐步完成代码;P@TimRobbins当前位置是的,引擎盖下有相当多的复杂性。但所有这些内部复杂性都是为了向用户提供外部简单性。