private function invokeControllerAction($controllerClassNamed, $actionNamed, array $givenArgs = [])
	{
		if (is_wp_error($controllerClass = $this->getControllerClass($controllerClassNamed))) {
			return $controllerClass;
		}
		$reflection = new \ReflectionClass($controllerClass);
		$controller = new $controllerClass($this);
		if (!$reflection->hasMethod($actionNamed)) {
			return new \WP_Error('method_not_found', "Method Not Found: {$controllerClassNamed}@{$actionNamed}", ['status' => 404]);
		}
		$method = $reflection->getMethod($actionNamed);
	
		$args = [];
		if (!empty($givenArgs)) {
			$args[] = $givenArgs[0];
		}

		if (count($givenArgs) > 1) {
			$params = $method->getParameters();

			// loop over method params, ignoring the first
			for ($i=1; $i<count($params); $i++) {
				$param = $params[$i];

				// if the param has no type 
				if (!$param->hasType()) {

					if ($this->getPlugin()->bound($param->name)) {
						$args[] = $this->getPlugin()->make($param->name);
					}	

				} else {
					$class = $param->getClass();
					// map in plugin
					if ($class->isSubclassOf(\Illuminate\Container\Container::class)) {
						$args[] = $this->getPlugin();

					// otherwise, use the service container to build whatever
					} else {
						$args[] = $this->getPlugin()->make($class->name);
					}
				}
			}
		}

		return $method->invokeArgs($controller, $args);
	}