【问题标题】:Is there an allowed maximum number of AddTransient calls in .net Dependency Injection?.net 依赖注入中是否有允许的最大 AddTransient 调用数?
【发布时间】:2020-03-19 14:51:15
【问题描述】:

我正在对现有的使用 .Net-Core 和 Entity Framework 的 webapp 添加一些修改。 使用了依赖注入,现在我们有 22 行调用 AddTransient() 方法。可悲的是,我是第 23 次通话中的“被选中者”,而 webapp 显示出一些奇怪的行为。我调试得越深越好,看到消息就卡住了:Ein Ausnahmefehler des Typs "System.StackOverflowException" ist in Microsoft.Extensions.DependencyInjection.dll aufgetreten.

翻译成英文类似:An Exception of type "System.StackoverflowException" was raised in Microsoft.Extensions.DependencyInjection.dll

我很确定第 23 个类的构造函数的构建方式与之前的 22 个相同。如果我禁用另一个 addTransient-Call,那么再次有 22 个 addTransient-calls,webapp 将按原样工作。这就是我假设一些限制的原因。

您是否遇到过同样的行为?或者是否有一些资源可以阅读有关 Microsoft.Net 依赖注入的限制以及在这种情况下可以做什么?

【问题讨论】:

  • 这不是临时调用,而是作为第 23 次调用的一部分启动的对象进入无限递归,导致 SO 异常。您可以将该对象转移到第一个数字,它仍然会导致,检查该类并纠正问题
  • @MrinalKamboj 我将第 23 个 addTransient 移动到第一个的位置 => webapp 显示错误。然后我注释掉了第 22 条 addTransient-Call => webapp 就可以了。

标签: c# .net-core dependency-injection


【解决方案1】:

你很可能有一个循环依赖。检查您尝试注册的新类并查看其依赖项。更好的是,暂时删除其所有依赖项,然后再次尝试注册。

【讨论】:

  • 我注释掉了第 23 课的 addTransient-call。然后我建立了一个完整的新类,并插入了 addTransient-call,以获得一个新的“23rd”。但是错误仍然存​​在。如果我将调用次数减少到 22 次,它会起作用。
【解决方案2】:

由于某些法律限制,我们无法发布源代码的重要部分,我们也没有时间重写它,使其公开可用。

但我们尝试了不同的方法,发现将 IoC-Container 从 Microsoft .net DI 更改为 Autofac 产生了积极影响,并且错误消失了。

我知道,这对你们所有人来说都不是一个令人满意的答案,但如果你想知道一些具体的细节,请随时提问。但也许它证实了你关于给 Autofac(或任何其他 IoC 容器)一个机会的想法。

【讨论】:

    猜你喜欢
    • 2022-11-12
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多