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()
вместо.
Смотрите эту документацию.