Php 奥林:在准备中使用make

Php 奥林:在准备中使用make,php,auryn,Php,Auryn,我目前正在尝试使用Auryn,并试图通过依赖项注入使Monolog logger的特定实例在任何地方都可用。我正在使用的代码库是使用PSR LoggerAwareInterface来指示一个类可以注入一个记录器(通过setlogger) 我正在尝试如下设置: $logger = new Logger ("myApp", [new SyslogHandler ("myAppLog", LOG_USER, Logger::DEBUG)]); $auryn = new Injector ();

我目前正在尝试使用Auryn,并试图通过依赖项注入使Monolog logger的特定实例在任何地方都可用。我正在使用的代码库是使用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不在对象上下文中(尽管PHP5.4应该支持在闭包中使用$this)

我也试着这样写

$auryn -> prepare (LoggerAwareInterface::class, function (LoggerAwareInterface $client) use ($logger)
{
    $client -> setLogger ($logger);
});
如果在调用
$auryn->prepare()
的作用域中存在
$logger
,那么这确实有效,但我真的一点都不喜欢它,因为它现在要求
$logger
存在于auryn之外,这实际上使它成为全局状态,并且似乎从一开始就击败了依赖项注入容器。我更愿意将记录器共享到Auryn中,然后在回调中使用共享实例


因为我是奥林的新手,所以我忽略了一个显而易见的解决方案。如果是这样,那么我在这里做错了什么?

$this
指的是外部范围中的
this
。因此,除非您实际在一个类中,否则它不会工作。通过使用
$auryn->prepare(LoggerAwareInterface::class,function(LoggerAwareInterface$client)use($auryn)