PHP DI - не может быть разрешен. Параметр $logger функции __construct() не имеет значения, определенного или предполагаемого

Я пытаюсь получить базовый пример работы PHP-DI, но я просто застрял на довольно простом примере. Я предполагаю, что упускаю что-то простое здесь, но не смог выделить это.

Это не распознавание подсказки типа LoggerInterface, но это взято прямо из примеров, поэтому я не понимаю, что я делаю неправильно.

Пример отлично работает, когда я удаляю LoggerInterface из подписи службы.

Класс обслуживания:

<?php
namespace test\ServiceLayer;
class TestService extends BaseService{
  public function __construct(\Psr\Log\LoggerInterface $logger){}
}
?>

config.php

<?php
use Monolog\Logger;
return [
    'TestService' => \DI\create(\test\ServiceLayer\TestService::class),
    Psr\Log\LoggerInterface::class => DI\factory(function () {
        $logger = new Logger('mylog');
        return $logger;
    }),
];
?>

использование:

<?php
$builder = new \DI\ContainerBuilder();
$builder->addDefinitions('config.php');
$container = $builder->build();
$service = $container->get('TestService');
?>

Исключение:

объект (DI \ Definition \ Exception \ InvalidDefinition) # 115 (7) {
["message": protected] => string (196) "Запись"TestService"не может быть разрешена: параметр $logger для __construct() не имеет ни определенного, ни предполагаемого значения Полное определение: Object ( class = arkon\ServiceLayer\TestService lazy = false)"

1 ответ

Решение

Ты используешь create(), если вы хотите, чтобы запись была автоматически подключена, вы должны использовать autowire() вместо.

Смотрите эту документацию.

Другие вопросы по тегам