【问题标题】:Lifetime in chained Dependency Injection链式依赖注入的生命周期
【发布时间】:2017-06-04 05:20:26
【问题描述】:

在 .NET Core 中,可以使用三种不同的生命周期:TransientScopedSingleton

假设我有以下依赖注入服务链:

Service A > Service B > Service C,

表示Service A 注入了Service B(例如Service A 依赖于Service B)并且Service B 注入了Service C

现在考虑Service B 的生命周期为SingletonService C 的生命周期为Transient。因为Service BSingleton,所以它只被创建一次。 Service CTransient,但因为 Service BSingletonService C 仍然只创建一次。

这个论证是否正确,因此我为Service C 设置的Transient 生命周期没有意义吗?还是我在这里想错了?

【问题讨论】:

    标签: dependency-injection asp.net-core singleton lifetime transient


    【解决方案1】:

    您在此处描述的是一个常见问题,称为Captive Dependency。服务 C 成为俘虏,因为它的消费者有更长的生命周期。

    此问题很普遍,并且是使用依赖注入和 DI 容器的应用程序中常见的错误来源。当应用程序增长时,这些问题很容易被忽视。从经验中我可以看出,将错误追溯到此类错误配置可能需要很长时间。

    很遗憾,.NET Core 的内置容器无法检测和防止此类错误。其他一些更成熟的 .NET DI 库实际上具有这些功能,它们可以检测和防止此类错误配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多