/** * @param ClassDefinition $definition * @param array $args * * @return mixed * @throws TypeMismatchException */ public function getClass(ClassDefinition $definition, array $args = []) { $abstract = $definition->getValue(); $class = $definition->getId(); if (is_callable($abstract)) { $instance = $this->container->call($abstract, $args); } else { if (is_object($abstract)) { $instance = $abstract; } else { if ($abstract === null) { $abstract = $class; } $instance = $this->reflector->resolveClass($this->container, $abstract, $args); } } $this->matchClassType($class, $instance); return $instance; }