我目前正在尝试使用 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 的新手,因此我可能忽略了一个明显的解决方案。如果是这样,那么我在这里做错了什么?