4.2. Autowiring

未匹配的标注

自动装配

自动装配 是一个非常简单的词,表示非常简单的内容:容器自动创建和注入依赖项的能力

为了实现这一点, PHP-DI 使用了 PHP反射 检测构造函数需要哪些参数。

编译容器时,自动装配不会影响性能。

让我们举个例子:

class UserRepository
{
    // ...
}

class UserRegistrationService
{
    public function __construct(UserRepository $repository)
    {
        // ...
    }
}

当 PHP-DI 需要创建 UserRegistrationService时, 它检测到构造函数采用了 UserRepository 对象 (使用 类型提示).

无需任何配置, PHP-DI会创建 (如果尚未创建) UserRepository 实例并将其作为构造函数参数传递。等效的原始PHP代码为:

$repository = new UserRepository();
$service = new UserRegistrationService($repository);

可以想象,它非常简单, 不需要任何配置,并且可以正常工作!

配置

*默认情况下会启用自动装配 您可以使用容器构建器禁用它:

$containerBuilder->useAutowiring(false);

局限性

PHP-DI 无法解决一以下情况:

class Database
{
    public function __construct($dbHost, $dbPort)
    {
        // ...
    }

    public function setLogger(LoggerInterface $logger)
    {
        // ...
    }
}
  • 他不知道要为构造函数提供什么参数 (因为对象没有类型提示)
  • setLogger() 将不会被调用

对于这些类,您将需要在 PHP definitions 中使用DI\autowire()明确声明要注入的内容。

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

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

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

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

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


暂无话题~