gpt4 book ai didi

oop - "Bastard Injection"和 "Poor Man' s 注入(inject)之间的真正区别是什么”

转载 作者:行者123 更新时间:2023-12-03 05:44:39 25 4
gpt4 key购买 nike

来自Dependency Injection in .NET我知道应该在 Composition Root 创建对象图当您使用 IoC Container 时,该应用程序对我来说很有意义.

在我见过的所有应用程序中,当尝试使用 DI 时,总是有两个构造函数:

  • 以依赖项作为参数的一个
  • 不带参数的“默认”一个,反过来又调用另一个“更新”所有依赖项

然而,在上述书中,这被称为“ SCSS 注入(inject)反模式”,这就是我以前所知道的“穷人注入(inject)”。

现在考虑到这一切,我想说“穷人注入(inject)”只是不使用 IoC Container而是在所述 Composition Root 上手动编码所有对象图.

所以我的问题是:

  1. 我是否正确理解了这些概念,还是完全偏离了轨道?
  2. 如果您仍然需要在 IoC 容器中注册所有依赖项,而不是在完全相同的组合根中手动编码它们,那么使用 IoC 容器的真正好处是什么?
  3. 如果我误解了“穷人注入(inject)”的真正含义,有人可以澄清一下吗?

最佳答案

说到 DI,术语的使用存在很多相互冲突的情况。 穷人的 DI 一词也不异常(exception)。对于某些人来说,它意味着一件事,而对于另一些人来说,它意味着不同的事情。

我想通过这本书做的一件事是为 DI 提供一致的模式语言。当涉及到所有这些使用冲突的术语时,我有两个选择:提出一个全新的术语,或者选择最普遍的用法(根据我的主观判断)。

总的来说,我更喜欢重复使用现有的术语,而不是创建一个全新的(因此是陌生的)模式语言。这意味着在某些情况下(例如 Poor Man's DI),您对名称的理解可能与书中给出的定义不同。这种情况经常发生在模式书籍上。

至少我觉得这本书似乎已经完成了准确解释穷人的 DI 和 SCSS 注入(inject)的工作,因为 O.P. 中给出的解释是正确的。

关于 DI 容器的真正好处,我将向您推荐这个答案:Arguments against Inversion of Control containers

<小时/>

P.S. 2018-04-13:我想指出的是,我几年前就承认“穷人的 DI”这个词在传达“穷人的 DI”方面做得很差(原文如此!)原则的本质,所以多年来,现在,我已经 instead called it Pure DI .

<小时/>

P.P.S。 2020-07-17:我们从 second edition 中删除了术语 Bastard Injection 。在第二版中,我们只是使用更通用的术语Control Freak来指定您的代码“依赖于除组合根之外的任何位置的 volatile 依赖项。”

关于oop - "Bastard Injection"和 "Poor Man' s 注入(inject)之间的真正区别是什么”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com