我正在尝试实现 Symfonys 依赖注入容器。
我设置了 2 个容器,一个用于数据库,一个用于系统用户。
而且我正在使用addArgument()
类App
和SystemUser
类,将对象推送到类,并将对象App
推送到类。SystemUser
SystemUser
Database
索引.php:
require_once 'vendor/autoload.php';
use TestingDI\App;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
$containerBuilder = new ContainerBuilder();
$containerBuilder->register('database', '\TestingDI\Database');
$containerBuilder->register('system.user', '\TestingDI\SystemUser')
->addArgument(new Reference('database'));
$containerBuilder->register('app', '\TestingDI\App')
->addArgument(new Reference('system.user'));
$database = $containerBuilder->get('database');
$systemUser = $containerBuilder->get('system.user');
$app = $containerBuilder->get('app');
# Initialize App class
$app = new App();
应用程序.php:
<?php
namespace TestingDI;
use TestingDI\SystemUser;
class App {
public $systemUser;
public function __construct(SystemUser $systemUser)
{
var_dump($systemUser);
}
}
我确实看到了带有对象的 var_dump 结果,但不断收到此错误:
PHP 致命错误:未捕获的 ArgumentCountError:函数 TestingDI\App::__construct() 的参数太少,在第 28 行的 /www/potato/symfony-di/index.php 中传递了 0,而 /www/potato/symfony 中预期的正是 1 -di/testingdi/App.php:12
堆栈跟踪:
0 /www/potato/symfony-di/index.php(28): 测试DI\App->__construct()
1 {main} 在第 12 行的 /www/potato/symfony-di/testingdi/App.php 中抛出
这些是我的其他课程:
系统用户.php
<?php
namespace TestingDI;
use TestingDI\Database;
class SystemUser {
public $db;
public function __construct( Database $database )
{
$this->db = $database;
}
}
数据库.php
<?php
namespace TestingDI;
class Database {
public function __construct()
{
}
}