我正在尝试获取 PHP-DI 工作的基本示例,但我很容易陷入一个相当基本的示例。我想我在这里遗漏了一些简单的东西,但一直没能把它挑出来。
它无法识别 LoggerInterface 类型提示,但这是直接从示例中提取的,所以我不明白我做错了什么。
当我从服务签名中删除 LoggerInterface 时,该示例工作正常。
服务等级:
<?php
namespace test\ServiceLayer;
class TestService extends BaseService{
public function __construct(\Psr\Log\LoggerInterface $logger){}
}
?>
Run Code Online (Sandbox Code Playgroud)
配置文件
<?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;
}),
];
?>
Run Code Online (Sandbox Code Playgroud)
用法:
<?php
$builder = new \DI\ContainerBuilder();
$builder->addDefinitions('config.php');
$container = $builder->build();
$service = $container->get('TestService');
?>
Run Code Online (Sandbox Code Playgroud)
例外:
object(DI\Definition\Exception\InvalidDefinition)#115 (7) {
["message":protected]=> string(196) "Entry "TestService" cannot beresolution: __construct() 的参数 $logger 没有定义值或可猜测的完整定义:对象(类 = arkon\ServiceLayer\TestService lazy = false)”
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |