6.3. Inject on an existing instance

未匹配的标注

在现有实例上注入

PHP-DI 3.3中引入的功能

使用容器的标准方法是从容器中获取对象,并注入其所有依赖项:

$object = $container->get('foo');

但是在某些情况下,您无法控制对象的创建,但是您仍想解决其依赖项

PHP-DI提供了injectOn方法:

// $object 是某个类的实例

$container->injectOn($object);

现在,$ object注入了其所有依赖项(通过setter注入和属性注入)。

构造函数注入

PHP-DI将不执行任何构造函数注入(因为实例已创建)。

如果您自己创建对象,则必须自己进行构造函数注入:

$object = new MyClass($someDependency, $someOtherDependency);
$container->injectOn($object);

如果从某个库/框架中获取对象,则只需调用injectOn()

为什么?

因为我们希望这可以帮助将PHP-DI与其他框架集成:

  • MVC 框架 (Symfony, Zend Framework等): 在控制器本身中注入控制器的依赖项。
  • Tests (PHPUnit, …): 在测试类中注入工具,例如logger,timer(用于性能测试),实体管理器(用于集成测试)等

示例:

class MyController {
    public function __construct() {
        // 获取容器...
        $container->injectOn($this);
    }
}

当然,首选方法仍然是使用$ container-> get()。但是有时您无法在框架的内部来拦截对象的创建。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/php-di/6.0/inje...

译文地址:https://learnku.com/docs/php-di/6.0/inje...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~