diff --git a/core/core.services.yml b/core/core.services.yml index b8f6452..34ad15b 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -473,7 +473,7 @@ services: class: Drupal\Core\Extension\ModuleInstaller tags: - { name: service_collector, tag: 'module_install.uninstall_validator', call: addUninstallValidator } - arguments: ['@app.root', '@module_handler', '@kernel'] + arguments: ['@app.root', '@module_handler', '@kernel', '@event_dispatcher'] lazy: true content_uninstall_validator: class: Drupal\Core\Entity\ContentUninstallValidator diff --git a/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/core/lib/Drupal/Core/Extension/ModuleInstaller.php index c7473b6..ebb79d6 100644 --- a/core/lib/Drupal/Core/Extension/ModuleInstaller.php +++ b/core/lib/Drupal/Core/Extension/ModuleInstaller.php @@ -13,6 +13,7 @@ use Drupal\Core\DrupalKernelInterface; use Drupal\Core\Entity\EntityStorageException; use Drupal\Core\Entity\FieldableEntityInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; /** * Default implementation of the module installer. @@ -51,6 +52,13 @@ class ModuleInstaller implements ModuleInstallerInterface { protected $uninstallValidators; /** + * The event dispatcher. + * + * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface + */ + protected $eventDispatcher; + + /** * Constructs a new ModuleInstaller instance. * * @param string $root @@ -59,14 +67,17 @@ class ModuleInstaller implements ModuleInstallerInterface { * The module handler. * @param \Drupal\Core\DrupalKernelInterface $kernel * The drupal kernel. + * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher + * The event dispatcher. * * @see \Drupal\Core\DrupalKernel * @see \Drupal\Core\CoreServiceProvider */ - public function __construct($root, ModuleHandlerInterface $module_handler, DrupalKernelInterface $kernel) { + public function __construct($root, ModuleHandlerInterface $module_handler, DrupalKernelInterface $kernel, EventDispatcherInterface $event_dispatcher) { $this->root = $root; $this->moduleHandler = $module_handler; $this->kernel = $kernel; + $this->eventDispatcher = $event_dispatcher; } /** @@ -212,7 +223,8 @@ public function install(array $module_list, $enable_dependencies = TRUE) { $version = max(max($versions), $version); } - $event_dispatcher = $this->getEventDispatcher(); + /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher */ + $event_dispatcher = $this->kernel->getContainer()->get('event_dispatcher'); $event = new ModuleEvent($module); $event_dispatcher->dispatch(ModuleEvents::MODULE_INSTALLED, $event); @@ -357,7 +369,7 @@ public function uninstall(array $module_list, $uninstall_dependents = TRUE) { \Drupal::service('config.manager')->uninstall('module', $module); /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher */ - $event_dispatcher = $this->getEventDispatcher(); + $event_dispatcher = $this->kernel->getContainer()->get('event_dispatcher'); $event = new ModuleEvent($module); $event_dispatcher->dispatch(ModuleEvents::MODULE_UNINSTALLED, $event); @@ -479,6 +491,7 @@ protected function updateKernel($module_filenames) { // dependencies. $container = $this->kernel->getContainer(); $this->moduleHandler = $container->get('module_handler'); + $this->eventDispatcher = $container->get('event_dispatcher'); } /** @@ -500,17 +513,4 @@ public function validateUninstall(array $module_list) { return $reasons; } - /** - * Gets the event dispatcher from the current container. - * - * After the module installation we want to ensure to we are not using an old - * version of the event dispatcher. - * - * @return \Symfony\Component\EventDispatcher\EventDispatcherInterface - * The event dispatcher. - */ - protected function getEventDispatcher() { - return $this->kernel->getContainer()->get('event_dispatcher'); - } - }