8000 Support autowiring for EventDispatcher/EventDispatcherInterface · symfony/symfony@cd003a0 · GitHub
[go: up one dir, main page]

Skip to content

Commit cd003a0

Browse files
committed
Support autowiring for EventDispatcher/EventDispatcherInterface
1 parent 4eeb1f0 commit cd003a0

File tree

5 files changed

+37
-8
lines changed

5 files changed

+37
-8
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -449,11 +449,8 @@ private function registerDebugConfiguration(array $config, ContainerBuilder $con
449449
if ($debug) {
450450
$loader->load('debug.xml');
451451

452-
// replace the regular event_dispatcher service with the debug one
453-
$definition = $container->findDefinition('event_dispatcher');
454-
$definition->setPublic(false);
455-
$container->setDefinition('debug.event_dispatcher.parent', $definition);
456-
$container->setAlias('event_dispatcher', 'debug.event_dispatcher');
452+
// autowire services using the debug.event_dispatcher service instead of event_dispatcher
453+
$container->findDefinition('event_dispatcher')->setAutowiringTypes([]);
457454
}
458455

459456
$definition = $container->findDefinition('debug.debug_handlers_listener');

src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
</parameters>
1010

1111
<services>
12-
<service id="debug.event_dispatcher" class="Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher">
12+
<service id="debug.event_dispatcher" class="Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher" decorates="event_dispatcher">
1313
<tag name="monolog.logger" channel="event" />
14-
<argument type="service" id="debug.event_dispatcher.parent" />
14+
<argument type="service" id="debug.event_dispatcher.inner" />
1515
<argument type="service" id="debug.stopwatch" />
1616
<argument type="service" id="logger" on-invalid="null" />
17+
<autowiring-type>Symfony\Component\EventDispatcher\EventDispatcherInterface</autowiring-type>
18+
<autowiring-type>Symfony\Component\EventDispatcher\EventDispatcher</autowiring-type>
1719
</service>
1820

1921
<service id="debug.controller_resolver" decorates="controller_resolver" class="Symfony\Component\HttpKernel\Controller\TraceableControllerResolver">

src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
<services>
88
<service id="event_dispatcher" class="Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher">
99
<argument type="service" id="service_container" />
10+
<autowiring-type>Symfony\Component\EventDispatcher\EventDispatcherInterface</autowiring-type>
11+
<autowiring-type>Symfony\Component\EventDispatcher\EventDispatcher</autowiring-type>
1012
</service>
1113

1214
<service id="http_kernel" class="Symfony\Component\HttpKernel\HttpKernel">

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/AutowiringTypesTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use Doctrine\Common\Annotations\AnnotationReader;
1515
use Doctrine\Common\Annotations\CachedReader;
1616
use Symfony\Component\Templating\EngineInterface as ComponentEngineInterface;
17+
use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher;
18+
use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher;
1719
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface as FrameworkBundleEngineInterface;
1820

1921
class AutowiringTypesTest extends WebTestCase
@@ -46,6 +48,24 @@ public function testTemplatingAutowiring()
4648
$this->assertInstanceOf(ComponentEngineInterface::class, $autowiredServices->getEngine());
4749
}
4850

51+
public function testTraceableEventDispatcherAutowiring()
52+
{
53+
static::bootKernel(array('debug' => true));
54+
$container = static::$kernel->getContainer();
55+
56+
$autowiredServices = $container->get('test.autowiring_types.autowired_services');
57+
$this->assertInstanceOf(TraceableEventDispatcher::class, $autowiredServices->getDispatcher());
58+
}
59+
60+
public function testContainerAwareEventDispatcherAutowiring()
61+
{
62+
static::bootKernel(array('debug' => false));
63+
$container = static::$kernel->getContainer();
64+
65+
$autowiredServices = $container->get('test.autowiring_types.autowired_services');
66+
$this->assertInstanceOf(ContainerAwareEventDispatcher::class, $autowiredServices->getDispatcher());
67+
}
68+
4969
protected static function createKernel(array $options = array())
5070
{
5171
return parent::createKernel(array('test_case' => 'AutowiringTypes') + $options);

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/Bundle/TestBundle/AutowiringTypes/AutowiredServices.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,21 @@
1414
use Doctrine\Common\Annotations\Reader;
1515
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface as FrameworkBundleEngineInterface;
1616
use Symfony\Component\Templating\EngineInterface;
17+
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
1718

1819
class AutowiredServices
1920
{
2021
private $annotationReader;
2122
private $frameworkBundleEngine;
2223
private $engine;
24+
private $dispatcher;
2325

24-
public function __construct(Reader $annotationReader = null, FrameworkBundleEngineInterface $frameworkBundleEngine, EngineInterface $engine)
26+
public function __construct(Reader $annotationReader = null, FrameworkBundleEngineInterface $frameworkBundleEngine, EngineInterface $engine, EventDispatcherInterface $dispatcher)
2527
{
2628
$this->annotationReader = $annotationReader;
2729
$this->frameworkBundleEngine = $frameworkBundleEngine;
2830
$this->engine = $engine;
31+
$this->dispatcher = $dispatcher;
2932
}
3033

3134
public function getAnnotationReader()
@@ -42,4 +45,9 @@ public function getEngine()
4245
{
4346
return $this->engine;
4447
}
48+
49+
public function getDispatcher()
50+
{
51+
return $this->dispatcher;
52+
}
4553
}

0 commit comments

Comments
 (0)
0