为什么标量参数值注入在构造函数中不起作用?
Why scalar parameter value injection doesn't work in constructor?
我有设置 class:
<?php
declare(strict_types=1);
namespace App;
class Settings
{
private $settings_dir;
private $settings_file_name;
//..
public function __construct(string $dir, string $file_name)
{
$this->settings_dir = $dir;
$this->settings_file_name = $file_name;
//...
}
//...
}
和 PHP-DI 的配置:
<?php
return [
//...
\App\Settings::class => DI\autowire()
->constructorParameter('dir', __DIR__),
\App\Settings::class => DI\autowire()
->constructorParameter('file_name', 'app.php'),
//...
];
当我启动我的应用程序时,它显示:
DI\Definition\Exception\InvalidDefinition: Entry "App\Kernel" cannot
be resolved: Entry "App\Settings" cannot be resolved: Parameter $dir
of __construct() has no value defined or guessable
当我用一种方法设置所有值时,它工作正常:
<?php
return [
//...
\App\Settings::class => DI\autowire()
->constructor(__DIR__, 'app.php')
];
怎么了?我没有做任何额外的 DI 配置。
PHP-DI v6.0.2, PHP 7.2.5
只是因为数组键重复。我必须使用:
\App\Settings::class => DI\autowire()->constructorParameter('dir', __DIR__)->constructorParameter('file_name', 'app.php')
我有设置 class:
<?php
declare(strict_types=1);
namespace App;
class Settings
{
private $settings_dir;
private $settings_file_name;
//..
public function __construct(string $dir, string $file_name)
{
$this->settings_dir = $dir;
$this->settings_file_name = $file_name;
//...
}
//...
}
和 PHP-DI 的配置:
<?php
return [
//...
\App\Settings::class => DI\autowire()
->constructorParameter('dir', __DIR__),
\App\Settings::class => DI\autowire()
->constructorParameter('file_name', 'app.php'),
//...
];
当我启动我的应用程序时,它显示:
DI\Definition\Exception\InvalidDefinition: Entry "App\Kernel" cannot be resolved: Entry "App\Settings" cannot be resolved: Parameter $dir of __construct() has no value defined or guessable
当我用一种方法设置所有值时,它工作正常:
<?php
return [
//...
\App\Settings::class => DI\autowire()
->constructor(__DIR__, 'app.php')
];
怎么了?我没有做任何额外的 DI 配置。
PHP-DI v6.0.2, PHP 7.2.5
只是因为数组键重复。我必须使用:
\App\Settings::class => DI\autowire()->constructorParameter('dir', __DIR__)->constructorParameter('file_name', 'app.php')