You are here

class ClassResolver in Drupal 9

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/DependencyInjection/ClassResolver.php \Drupal\Core\DependencyInjection\ClassResolver

Implements the class resolver interface supporting class names and services.

Hierarchy

Expanded class hierarchy of ClassResolver

2 files declare their use of ClassResolver
ControllerResolverTest.php in core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php
Contains \Drupal\Tests\Core\Controller\ControllerResolverTest.
ThemeNegotiatorTest.php in core/tests/Drupal/Tests/Core/Theme/ThemeNegotiatorTest.php
1 string reference to 'ClassResolver'
core.services.yml in core/core.services.yml
core/core.services.yml
1 service uses ClassResolver
class_resolver in core/core.services.yml
Drupal\Core\DependencyInjection\ClassResolver

File

core/lib/Drupal/Core/DependencyInjection/ClassResolver.php, line 11

Namespace

Drupal\Core\DependencyInjection
View source
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;
  }

}

Members