![]() |
1
3
在Java世界中,依赖注入通常涉及框架、容器等。但不需要那么多机器。
在Python世界中,没有依赖注入的框架文化,因此那里的许多程序员都想知道到底是怎么回事。对他们来说,DI“只是”能够将对象或类传递给构造函数。 回答您的具体问题:
|
![]() |
2
15
martinfowler是这方面的专家,他认为依赖注入是抽象概念(称为控制反转)的具体实现的另一个名称( full article 在它的根上,所有DI的意思是:一个类依赖的对象被初始化并从外部传递给它,而不是类本身负责获取/初始化那些对象。如何实现这一点的细节超出了模式的范围。 IoC也是一样,但正如Martin Fowler所说,“控制反转”是描述正在发生的事情的一种非常迟钝的方式。 我个人并不认为“依赖注入”更好。我将其描述为“正确使用构造函数”。
使用IoC/DI也一样:
我恭敬地不同意那些认为它不是真正的IoC/DI的人,除非你有一个显式的binder/assembler/what把注入的类型和具体的实现连接起来,因为接收依赖项的类不知道区别。在外部类或外部配置文件中排列依赖关系是一个实现细节。 |
![]() |
3
4
是的,当然。 是的,当然。
一个物体被赋予它所依赖的一切;它的依赖性被注入其中。 |
![]() |
4
1
|
![]() |
5
1
有趣的是,第一个例子根本不是DI,而是 Service Locator anti-pattern . 您自己的示例是纯DI—更具体地说是 构造器注入 DI不是一种模式,而是模式和原则的集合。当我们手工连接所有依赖项时,我们通常称之为 可怜的男人 . 换句话说,DI容器是严格可选的,但强烈建议:) 另请参见 this description of what a DI Container brings to the table . |
![]() |
6
0
|
![]() |
7
0
原因是您正在安排依赖项(
|
![]() |
8
0
以下是一些其他文章,可能会带来一些关于这个主题的其他重要细节,按照“应该先读”的顺序: 读完这些之后,我发现自己对这个问题有了更好的理解。 |
![]() |
Vedant · 如何解决python啦啦队长问题?[已关闭] 2 年前 |
![]() |
cobby · 在战略模式中使用工厂模式? 2 年前 |
![]() |
Nobody · Java中带while循环的三角形模式 2 年前 |
![]() |
Eduard Stefanescu · 如何在层之间传输异常? 6 年前 |
![]() |
D. Schreier Talha Noyon · 对于目录中的每个类 6 年前 |
![]() |
Tanvi Jaywant · 如何重载类 6 年前 |