code: protected function build($class, $params, $config)
      {
          /* @var $reflection ReflectionClass */
          list($reflection, $dependencies) = $this->getDependencies($class);
  
          foreach ($params as $index => $param) {
              $dependencies[$index] = $param;
          }
  
          $dependencies = $this->resolveDependencies($dependencies, $reflection);
          if (!$reflection->isInstantiable()) {
              throw new NotInstantiableException($reflection->name);
          }
          if (empty($config)) {
              return $reflection->newInstanceArgs($dependencies);
          }
  
          $config = $this->resolveDependencies($config);
  
          if (!empty($dependencies) && $reflection->implementsInterface('yii\base\Configurable')) {
              // set $config as the last parameter (existing one will be overwritten)
              $dependencies[count($dependencies) - 1] = $config;
              return $reflection->newInstanceArgs($dependencies);
          }
  
          $object = $reflection->newInstanceArgs($dependencies);
          foreach ($config as $name => $value) {
              $object->$name = $value;
          }
  
          return $object;
      }
docs: Creates an instance of the specified class.
  This method will resolve dependencies of the specified class, instantiate them, and inject
  them into the new instance of the specified class.
  @param string $class the class name
  @param array $params constructor parameters
  @param array $config configurations to be applied to the new instance
  @return object the newly created instance of the specified class
  @throws NotInstantiableException If resolved to an abstract class or an interface (since 2.0.9)