Auryn: использование make внутри препарата

В настоящее время я экспериментирую с 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, может быть очевидное решение, которое я пропускаю. Если так, то что я тут не так делаю?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]