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()
明确声明要注入的内容。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。