簡體   English   中英

簡單注入器:自動構造函數注入遞歸

[英]Simple Injector: Automatic constructor injection recursion

我試圖了解如何在SimpleInjector.NET中完成自動構造函數注入。 我的工作源代碼來自“代碼項目”文章(v1.5.0.12199)。

我查看了Container的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.BuildExpressionInternal
  • Registration.BuildExpression
  • Registration.BuildTransientExpression
  • Registration.BuildNewExpression
  • Registration.BuildConstructorParameters
  • Registration.BuildParameterExpressionFor
  • DefaultConstructorInjectionBehavior.BuildParameterExpression
  • InstanceProducer.BuildExpression
  • InstanceProducer.BuildExpressionInternal <-遞歸從此處開始
  • Registration.BuildExpression

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM