Почему не работает инъекция (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 "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')
];


В чем дело? Никаких доп. настроек контейнера не делаю.

PHP-DI v6.0.2, PHP 7.2.5
  • Вопрос задан
  • 260 просмотров
Решения вопроса 1
@BI0R0B0T
У вас в массиве дублируется ключ. Установка второго параметра удаляет первый
[ 'aaa'=>1, 'aaa' =>2 ] === ['aaa'=>2]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы