code: public function invoke(Container $container)
      {
          $controller = $container->get($this->route->getControllerId());
  
          // TODO: check for null ?
  
          // TODO: move this into the converter registry
  
          $reflect      = new \ReflectionClass($controller);
          $method       = $reflect->getMethod($this->route->getControllerMethod());
          $methodParams = $method->getParameters();
  
          $callParams = [];
  
          foreach ($methodParams as $methodParam) {
  
              $methodParamName = $methodParam->getName();
              // do we get something from the matched parameters?
              $input = $this->params[$methodParamName] ?? null;
              // use is as the default that will be passed to the method
              $callParams[$methodParamName] = $input;
  
              // do we need to convert the thing
              if ($methodParam->getClass()) {
  
                  // find the converter that handle the param type
                  $paramClass     = $methodParam->getClass();
                  $converterToUse = null;
  
                  // find the first converter that can do it
                  foreach ($this->converterRegistry->getConverters() as $converter) {
                      if ($converter->canHandle($paramClass)) {
                          $converterToUse = $converter;
                          break;
                      }
                  }
  
                  if ($converterToUse) {
                      // convert the input
                      $converted = $converterToUse->fromRequest($paramClass, $input);
  
                      // if we got nothing, does the parameter allow a null ?
                      if ($converted === null && ! $methodParam->isOptional() && ! $methodParam->allowsNull()) {
                          throw (new HttpNotFound())->setInfo("Could not find {$paramClass->getName()}::$input");
                      }
  
                      $callParams[$methodParamName] = $converted;
                  } else {
                      throw (new HttpInternalServerError())->setInfo('No converter found for ' . $paramClass->getName());
                  }
              }
          }
  
          return $method->invokeArgs($controller, $callParams);
      }
docs: @param Container $container
  
  @return mixed