0

我目前正在尝试使用 Auryn,并试图通过依赖注入使 Monolog 记录器的特定实例随处可用。我正在使用的代码库使用 PSR LoggerAwareInterface 来指示一个类可以注入一个记录器(通过 setlogger)。

我正在尝试将其设置如下:

$logger = new Logger ("myApp", [new SyslogHandler ("myAppLog", LOG_USER,  Logger::DEBUG)]);
$auryn  = new Injector ();

$auryn -> share ($logger);
$auryn -> prepare (LoggerAwareInterface::class, function (LoggerAwareInterface $client)
{
    $client -> setLogger ($this -> make (Logger::class));
});

但是,这似乎不起作用,因为 $this 不在对象上下文中(尽管 PHP 5.4 应该支持在闭包中使用 $this)。

我也试过这样写。

$auryn -> prepare (LoggerAwareInterface::class, function (LoggerAwareInterface $client) use ($logger)
{
    $client -> setLogger ($logger);
});

如果$logger存在于进行$auryn -> prepare ()调用的范围内,这确实有效,但我真的一点也不喜欢它,因为它现在需要$logger存在于 Auryn 之外,这有效地使其成为全局状态,并且似乎破坏了依赖注入容器的点第一名。我更愿意将记录器共享到 Auryn,然后在回调中使用共享实例。

由于我是 Auryn 的新手,因此我可能忽略了一个明显的解决方案。如果是这样,那么我在这里做错了什么?

4

0 回答 0