【发布时间】:2021-12-14 14:08:57
【问题描述】:
nestjs docs 描述了注入依赖项的两种主要方法,constructor-based 和 property-based 注入。还提到了基于构造函数的注入应该在可能的情况下优先于基于属性的注入,而无需任何说明。
这是有什么具体原因还是只是某种代码风格指南?
【问题讨论】:
标签: nestjs
nestjs docs 描述了注入依赖项的两种主要方法,constructor-based 和 property-based 注入。还提到了基于构造函数的注入应该在可能的情况下优先于基于属性的注入,而无需任何说明。
这是有什么具体原因还是只是某种代码风格指南?
【问题讨论】:
标签: nestjs
警告 如果你的类没有扩展另一个提供者,你应该总是更喜欢使用基于构造函数的注入。
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/
【讨论】: