#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()