public function parseQueryString(Uri $uri): IImmutableDictionary
    {
        if (($queryString = $uri->getQueryString()) === null) {
            return new ImmutableHashTable([]);
        }

        if (!isset($this->parsedQueryStringCache[$queryString])) {
            $parsedQueryString = [];
            parse_str($queryString, $parsedQueryString);
            $kvps = [];

            foreach ($parsedQueryString as $key => $value) {
                $kvps[] = new KeyValuePair($key, $value);
            }

            $this->parsedQueryStringCache[$queryString] = new ImmutableHashTable($kvps);
        }

        return $this->parsedQueryStringCache[$queryString];
    }