gpt4 book ai didi

dependency-injection - 是什么让 IoC 容器成为 IoC 容器?

转载 作者:行者123 更新时间:2023-12-01 11:39:43 33 4
gpt4 key购买 nike

所以..我一直在深入研究 IoC 容器和服务定位器。

我认为 IoC 容器是 IoC 容器,而不是服务定位器,因为

  1. 您使用它的方式。您将服务定位器传递给需要依赖项的类,然后通过容器检索依赖项。另一方面,您使用 IoC 容器将依赖项注入(inject)您的类。

  2. IoC 容器支持 Autowiring ,而服务定位器不支持。

我一直认为IoC容器是支持 Autowiring 的,必须支持才叫IoC容器,但是我和一些人转换,他们告诉我IoC容器不一定支持 Autowiring 。

如果这是真的,除了您使用它的方式之外,是什么让 IoC 容器成为 IoC 容器?

最佳答案

DI 容器是一个库,您可以通过多种方式使用它:

  • 您可以编写的最简单(伪)DI 容器基本上是一个美化字典。你可以build one in 15 lines of code .但是,它不进行 Autowiring ,这意味着它不进行组合,因此此时您只能将它用作服务定位器,但由于 Service Locator is an anti-pattern ,这没有太大好处。
  • 更好的 DI 容器还可以 Autowiring 。一旦它可以进行 Autowiring ,您也可以将它用作组合引擎。这意味着您可以专门根据构造函数注入(inject)等与容器无关的模式设计自己的代码,然后在 Composition Root 中要求组合引擎(DI 容器)将所有内容组合在一起。

只要 DI 容器支持 Autowiring ,您就可以在 both ways使用它,但您应该只将它用作组合引擎。

由于服务定位器是一种反模式,因此美化的字典没有任何值(value)。至少,我会说库必须支持 Autowiring 才能成为 DI 容器。但是,这仍然不能使它成为一个有值(value) 的组件。要从 DI 容器中获取值(value),it must support sophisticated convention-based heuristics ;如果没有,您最好手写作文(又名 Poor Man's DI)。

关于dependency-injection - 是什么让 IoC 容器成为 IoC 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22572261/

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