Обратный вызов фабрики делегаторов возвращает null

#php #dependency-injection #zend-framework #ioc-container #laminas

#php #внедрение зависимостей #zend-framework #ioc-контейнер #laminas

Вопрос:

Я хотел бы объединить существующую службу с другой, поэтому я обнаружил, что существует механизм фабрики делегаторов https://docs.mezzio.dev/mezzio/v3/features/container/delegator-factories /

Сервис очень прост, и я в основном скопировал пример в документации.

Даже без упрощения сервис выглядит примерно так

 class MoneyService {
    public function __constructor(LoggerService $logger) {
        $this->logger = $logger;
    }
}
 

Чтобы проверить, работает ли фабрика делегаторов, я создал ее следующим образом. Просто чтобы быть уверенным, что реальный сервис был построен правильно.

 class MoneyServiceDelegatorFactory
{

    public function __invoke(ContainerInterface $container, string $name, callable $callback)
    {
        var_dump($name, $callback());
        die;
    }
}
 

И, наконец, я подключаю его с помощью конфигурации

 'dependencies' => [
    'delegators' => [
        MoneyService::class => [
            MoneyServiceDelegatorFactory::class,
        ],
    ],
],
 

Если я попытаюсь проверить, есть ли в контейнере экземпляр MoneyService , то это true — $container->has(MoneyService::class) === true .

Итак, на фабрике делегаторов я ожидаю, что результатом $callback() будет экземпляр класса MoneyService. Но вместо этого я получаю null.

Ответ №1:

Я понял, что было не так. Я использую PHP-DI, но в этом случае я должен добавить фабрику, которая возвращает экземпляр MoneyService. После этого, на следующих заводах, он будет доступен в результате $callback()