alias(Dispatcher::class, DispatcherInterface::class) ->share(DispatcherInterface::class, [$this, 'getDispatcherService']); $container->share(ErrorSubscriber::class, [$this, 'getErrorSubscriber'], true) ->tag('event.subscriber', [ErrorSubscriber::class]); } /** * Get the DispatcherInterface service * * @param Container $container The DI container. * * @return DispatcherInterface */ public function getDispatcherService(Container $container): DispatcherInterface { $dispatcher = new Dispatcher; foreach ($container->getTagged('event.subscriber') as $subscriber) { $dispatcher->addSubscriber($subscriber); } return $dispatcher; } /** * Get the ErrorSubscriber service * * @param Container $container The DI container. * * @return ErrorSubscriber */ public function getErrorSubscriber(Container $container): ErrorSubscriber { $subscriber = new ErrorSubscriber($container->get(RendererInterface::class)); $subscriber->setLogger($container->get(LoggerInterface::class)); return $subscriber; } }