diff core/lib/Drupal/Core/DependencyInjection/ClassResolver.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/lib/Drupal/Core/DependencyInjection/ClassResolver.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,42 @@
+<?php
+
+namespace Drupal\Core\DependencyInjection;
+
+use Symfony\Component\DependencyInjection\ContainerAwareTrait;
+use Symfony\Component\DependencyInjection\ContainerAwareInterface;
+
+/**
+ * Implements the class resolver interface supporting class names and services.
+ */
+class ClassResolver implements ClassResolverInterface, ContainerAwareInterface {
+  use DependencySerializationTrait;
+  use ContainerAwareTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getInstanceFromDefinition($definition) {
+    if ($this->container->has($definition)) {
+      $instance = $this->container->get($definition);
+    }
+    else {
+      if (!class_exists($definition)) {
+        throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $definition));
+      }
+
+      if (is_subclass_of($definition, 'Drupal\Core\DependencyInjection\ContainerInjectionInterface')) {
+        $instance = $definition::create($this->container);
+      }
+      else {
+        $instance = new $definition();
+      }
+    }
+
+    if ($instance instanceof ContainerAwareInterface) {
+      $instance->setContainer($this->container);
+    }
+
+    return $instance;
+  }
+
+}