为什么标量参数值注入在构造函数中不起作用?

时间:2018-06-06 18:23:56

标签: php php-di

我有设置类:

<?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&#34; App \ Kernel&#34;不能   解决:输入&#34; App \ Settings&#34;无法解析:参数$ dir   __construct()没有定义或可猜测的值

当我用一种方法设置所有值时,它可以正常工作:

<?php
return [
   //...
    \App\Settings::class => DI\autowire()
        ->constructor(__DIR__, 'app.php')
];

出了什么问题?我没有做任何额外的DI配置。

PHP-DI v6.0.2,PHP 7.2.5

1 个答案:

答案 0 :(得分:0)

这只是因为数组密钥重复。我必须使用:

\App\Settings::class => DI\autowire()->constructorParameter('dir', __DIR__)->constructorParameter('file_name', 'app.php')