【问题标题】:How to use an IoC Container?? I don't get it如何使用 IoC 容器?我不明白
【发布时间】:2011-04-26 05:25:46
【问题描述】:

这是我目前所知道的:

  • DI 让我可以构建可重用、可单元测试的组件

  • DI 很冗长,因为它要求我显式设置依赖项(通过构造函数或方法。但我仍然不了解接口注入)。这就是需要容器或服务定位器的原因。

  • 容器比服务定位器更好,因为类不需要知道它的存在。

但是我发现了这些问题:

  • 现在某些类将依赖于 Container?如果我不为每个类使用默认配置,如我的服务文件中所述,某些类将需要调用容器来重新配置所需的对象。

  • 在这张幻灯片 http://www.slideshare.net/fabpot/dependency-injection-with-php-53 的第 79 页上,Fabien Potencier 说容器不管理所有对象,只管理具有单个实例的对象(但不是单例)。我现在更困惑了。

非常感谢任何帮助。 =)

【问题讨论】:

    标签: oop dependency-injection ioc-container


    【解决方案1】:

    现在某些类将依赖于 Container?

    没有。这就是你使用依赖注入而不是服务位置的原因。

    在这张幻灯片的第 79 页...

    参见第 82 页,它说“与模型对象不同”。老实说,我永远不会这样解释它(“只有一个实例的对象(!= Singletons)”要么是错误的,要么是非常特定于 PHP 的,它通常不适用于依赖注入或 IoC+DI 容器),但我打赌他试图解释的是容器通常管理类似服务的东西,而不是类似模型的东西。

    【讨论】:

    • 如果他们不依赖于容器,那么他们如何创建具有非默认配置的子项(即:运行时定义的设置)?
    • @HappyDeveloper:容器负责所有的布线和配置。各个类receive 依赖项和配置。
    • 是的,我知道,但这仅适用于默认对象创建。如果在程序执行的某个时刻(在孩子的孩子的孩子的方法内),出于某种原因,我需要一个说 DB_Cache 依赖而不是 File_Cache 怎么办?我需要调用容器
    • @HappyDeveloper:不,如果一个组件需要对某些服务进行不同的实现,那么由容器配置来提供正确的实现。
    • 1 - 容器读取配置文件 2 - 容器将所有内容连接起来 3 - 我的应用程序继续执行,并且在某些时候执行了“if”语句,并且 A 或 B 的实例是创建的。 4 - 容器预测了未来,所以 B(我想要的)已经连线了?此外,有时我可能想避免实例化(A 或 B 的eiter)。我认为这行不通
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多