2 回答
TA贡献1890条经验 获得超9个赞
您有多种选择:
扩展 PDO
自动装配对象
1. 扩展 PDO
use PDO;
class PDO2 extends PDO
{
// must be empty
}
容器定义:
use PDO2;
// ...
return [
PDO::class => function (ContainerInterface $container) {
return new PDO(...);
},
PDO2::class => function (ContainerInterface $container) {
return new PDO2(...);
},
];
用法
use PDO;
use PDO2;
class MyRepository
{
private $pdo;
private $pdo2;
public function __construct(PDO $pdo, PDO2 $pdo2)
{
$this->pdo = $pdo;
$this->pdo2 = $pdo2;
}
}
TA贡献1811条经验 获得超4个赞
如果你的应用中有一个类的多个实例(这里你有多个PDO类的实例),那么你必须配置每次注入哪一个。
这意味着PDO不能自动装配,因为 PHP-DI 无法根据服务/控制器/等来决定您想要哪个实例。
您需要使用配置(请参阅http://php-di.org/doc/php-definitions.html#autowired-objects)来定义为每个服务注入哪个实例(db1或db2在您的示例中)。
return [
MyService::class => DI\autowire()
->constructorParameter('pdo', DI\get('db1'))
->constructorParameter('pdo2', DI\get('db2')),
'db1' => function (ContainerInterface $c) {
return new PDO();
},
'db2' => function (ContainerInterface $c) {
return new PDO();
},
];
- 2 回答
- 0 关注
- 159 浏览
添加回答
举报