diff --git a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php index 8f437df1b1..acc69a3199 100644 --- a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php +++ b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php @@ -48,10 +48,11 @@ private function getProxyInstantiator() /** * {@inheritdoc} */ - protected function shareService(Definition $definition, $service, $id) - { - if ($definition->isShared()) { - $this->services[$lowerId = strtolower($id)] = $service; + protected function shareService(Definition $definition, $service, $id, array &$inlineServices) { + $inlineServices[null !== $id ? $id : spl_object_hash($definition)] = $service; + if (null !== $id && $definition->isShared()) { + $this->services[$id] = $service; + unset($this->loading[$id], $this->alreadyLoading[$id]); } } index 311d75b764..8f437df1b1 100644 --- a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php +++ b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php @@ -114,16 +114,19 @@ public function setParameter($name, $value) { /** * A 1to1 copy of parent::callMethod. */ - protected function callMethod($service, $call) { - $services = self::getServiceConditionals($call[1]); - - foreach ($services as $s) { + protected function callMethod($service, $call, array &$inlineServices) { + foreach (self::getServiceConditionals($call[1]) as $s) { if (!$this->has($s)) { return; } } + foreach (self::getInitializedConditionals($call[1]) as $s) { + if (!$this->doGet($s, ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE, $inlineServices)) { + return; + } + } - call_user_func_array(array($service, $call[0]), $this->resolveServices($this->getParameterBag()->resolveValue($call[1]))); + call_user_func_array(array($service, $call[0]), $this->doResolveServices($this->getParameterBag()->unescapeValue($this->getParameterBag()->resolveValue($call[1])), $inlineServices)); } /**