mezzio-swoole
mezzio-swoole copied to clipboard
TaskEventDispatchListener DI loop
Bug Report
I am following the recommended way to run a task event listener, using a TaskEventDispatchListener
, but have run into a DI loop.
Mezzio\Swoole\Task\TaskEventDispatchListener
> Mezzio\Swoole\Event\EventDispatcherInterface
> Mezzio\Swoole\Event\SwooleListenerProvider
> Mezzio\Swoole\Task\TaskEventDispatchListener
.
Q | A |
---|---|
Version(s) | 4.9.0 |
Summary
The following config results in memory exhaustion due to a circular dependency in DI.
<?php
return [
'mezzio-swoole' => [
'swoole-http-server' => [
'listeners' => [
Event\TaskEvent::class => [
TaskEventDispatchListener::class,
],
],
],
],
];
Current behavior
Memory exhaustion due to circular dependency.
-
\Mezzio\Swoole\Event\EventDispatcherInterface
requested from container -
\Mezzio\Swoole\Event\EventDispatcherFactory
runs - Gets
\Mezzio\Swoole\Event\SwooleListenerProvider
from the container -
\Mezzio\Swoole\Event\SwooleListenerProviderFactory
runs - Gets configured listeners
- One of the listeners is
\Mezzio\Swoole\Task\TaskEventDispatchListener
-
\Mezzio\Swoole\Task\TaskEventDispatchListenerFactory
runs - Gets
Mezzio\Swoole\Event\EventDispatcherInterface
from container
How to reproduce
Add this configuration, then attempt to get \Mezzio\Swoole\Event\EventDispatcherInterface
from the container.
<?php
return [
'mezzio-swoole' => [
'swoole-http-server' => [
'listeners' => [
Event\TaskEvent::class => [
TaskEventDispatchListener::class,
],
],
],
],
];
<?php
/** @var Laminas\ServiceManager\ServiceManager $container */
$eventDispatcher = $container->get(\Mezzio\Swoole\Event\EventDispatcherInterface::class);
#### Expected behavior
$eventDispatcher returned