为什么我不应该在构造函数中调用我的依赖项?

skb*_*skb 5 c# constructor dependency-injection

我一直认为从构造函数中调用类依赖项是一种不好的做法,但是昨天无法向同事阐明原因.任何人都可以提供不这样做的充分理由吗?

Mar*_*ann 6

Nikola Malovic的IoC第四定律有几个原因:

  • 当我们使用Constructor Injection组合应用程序时,我们经常创建实质的对象图,并且我们希望能够尽可能高效创建这些图.这是尼古拉最初的论点.
  • 在具有循环依赖关系的奇数(并且不推荐)情况下,注入的依赖关系可能尚未完全初始化,因此在此时尝试调用其成员可能会导致异常.此问题类似于从构造函数调用虚拟成员问题.从概念上讲,注入的依赖项等同于虚拟成员.
  • 使用构造函数注入,构造函数的职责是请求和接收依赖项.因此,根据单一责任原则(SRP),它不应该尝试做其他事情.有些读者可能会说我在这里滥用SRP,但我认为我只是在更细化的背景下应用基本原则.

请注意,此规则是上下文的:它适用于使用Constructor Injection的服务.实体和值对象倾向于不使用DI,因此其构造函数受其他规则的约束.