【问题标题】:Why are constructor-based injections preferred over property-based injections in nestjs为什么在nestjs中基于构造函数的注入优于基于属性的注入
【发布时间】:2021-12-14 14:08:57
【问题描述】:

nestjs docs 描述了注入依赖项的两种主要方法,constructor-basedproperty-based 注入。还提到了基于构造函数的注入应该在可能的情况下优先于基于属性的注入,而无需任何说明。

这是有什么具体原因还是只是某种代码风格指南?

【问题讨论】:

    标签: nestjs


    【解决方案1】:

    警告 如果你的类没有扩展另一个提供者,你应该总是更喜欢使用基于构造函数的注入。

    nestjs 文档确实提到了总是喜欢基于构造函数的注入的原因。它指出,如果您的类不扩展另一个提供程序,那么我们应该始终使用基于构造函数的注入。

    这意味着如果你的类有可选的依赖项,那么你可以使用基于属性的注入,否则你必须使用基于构造函数的注入。

    考虑一下,如果在这种情况下不注入 Class B,则依赖于 Class B 和 Class A 的 Class A 将不起作用,这是强制依赖,因此我们必须使用基于构造函数的注入。

    然而,同样的 A 类也依赖于 C 类,但如果在这种情况下不注入 C 类,A 类仍然可以工作,它是一个可选依赖项,因此我们可以在这里使用基于属性的注入。

    您可以在此处阅读更多相关信息:

    https://khalilstemmler.com/articles/tutorials/dependency-injection-inversion-explained/ http://dillonbuchanan.com/programming/dependency-injection-constructor-vs-property/

    【讨论】:

    • 但据我所知,基于属性的注入在nestjs中不是可选的?当我删除基于属性的注入的提供者时,构建会失败,就像使用基于构造函数的注入一样。所以我在这里看不出有什么不同。文档描述了基于属性的注入的一个优点,即您不必将依赖项传递给子类中的父构造函数。
    猜你喜欢
    • 2021-08-14
    • 1970-01-01
    • 2022-08-19
    • 2011-01-19
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2023-03-21
    • 2012-05-15
    相关资源
    最近更新 更多