protected function loadRoutingTable(string $routing_table_filepath): Core
    {
        if (file_exists($routing_table_filepath) === false) {

            throw new RoutingTableNotFoundException();

        }

        $loadedRoutes = require($routing_table_filepath);
        if (is_array($loadedRoutes) === false) {

            throw new InvalidRoutingTableException();

        }

        $defaultRouteConfig = [
            "methods" => [],
            "endpoint" => null,
            "arguments" => [],
            "controller" => null
        ];

        $routes = [];
        $prefix = $this->container->get("settings")["router"]["prefix"];
        foreach ($loadedRoutes as $routeName => $routeConfig) {

            $routeConfig = array_replace_recursive($defaultRouteConfig, $routeConfig);

            if (empty($routeConfig["methods"])) {

                $this->container->get("core-logger")->warning("Route '{$routeName}' has no method allowed and is ignored");
                continue;

            }

            if (is_null($routeConfig["endpoint"]) || trim($routeConfig["endpoint"]) === "") {

                $this->container->get("core-logger")->warning("Route '{$routeName}' has an empty pattern and is ignored");
                continue;

            }

            $route = new Route();
            $route->name = $routeName;
            $route->methods = $routeConfig["methods"];
            $route->endpoint = $prefix.$routeConfig["endpoint"];
            $route->arguments = $routeConfig["arguments"];
            $route->controller = $routeConfig["controller"];

            unset(
                $routeConfig["endpoint"],
                $routeConfig["methods"],
                $routeConfig["arguments"],
                $routeConfig["controller"]
            );

            $route->attributes = $routeConfig;
            $routes[$route->name] = $route;
        }

        $function = 'FastRoute\simpleDispatcher';
        $params = [];

        if (
            (bool) $this->container->get("settings")["router"]["cache"]["enabled"] === true &&
            is_writable($this->container->get("settings")["router"]["cache"]["path"])
        ) {

            $function = 'FastRoute\cachedDispatcher';
            $params = [
                'cacheFile' => $this->container->get("settings")["router"]["cache"]["path"]
            ];

        }

        $this->routes = $routes;

        $this->container->set("router", $function(function(FastRoute\RouteCollector $r) use ($routes) {

            /**
             * @var Route $routeObject
             */
            foreach ($routes as $routeObject) {

                $r->addRoute($routeObject->methods, $routeObject->endpoint, $routeObject->name);

            }

        }, $params));

        return $this;
    }