跳至主要内容
版本:5.1

基本概念

Joomla 依赖注入的基本思想是,开发人员不应该再通过调用来访问关键的 Joomla 类实例

$obj = new JoomlaClass();
// or
$obj = JoomlaClass::getInstance();

相反,他们应该向依赖注入容器 (DIC) 发出请求

$obj = $container( – please give me an instance of JoomlaClass – );

或通过应用程序类或从 DIC 获取的工厂类获取实例。

这样做的主要原因是通过简化模拟类来实现更好的测试。如果代码多次调用 JoomlaClass::getInstance(),则很难模拟该类进行测试。

如果代码始终使用 DIC 获取类的实例,那么要模拟它,我们只需将模拟类放入 DIC 中而不是真正的类即可。为了使请求特定类的操作不那么明显,我们可以改为请求满足特定接口的类

$obj = $container( – please give me an instance of a class that implements JoomlaInterface);

然后,DIC 将返回实际类或模拟类,具体取决于其配置方式。但是,使用类名与接口名无关紧要;正如我们将看到的,用于将内容放入和取出 DIC 的键只是一个字符串,因此我们只需确保对这两个操作使用相同的键字符串即可。