C# 简单注入器:自动构造函数注入递归
我试图了解SimpleInjector.NET中自动构造函数注入是如何完成的。我的工作源代码来自代码项目文章(v1.5.0.12199) 我查看了容器的GetInstance()代码和InstanceProducer的GetInstance()代码,但没有看到任何递归调用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版本中发生的情况(当然,将来可能会发生变化,因为它们是实现细节) 如果您想查
有人能指出自动构造函数注入的递归发生在哪里吗?从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当前位置是的,引擎盖下有相当多的复杂性。但所有这些内部复杂性都是为了向用户提供外部简单性。