void RegisterRoute(IHandlerCache handlerCache, ICollection <IRoute> routeCollection, KeyValuePair <string, List <Tuple <Type, RouteDefinition> > > routeRegistration)
        {
            // If there is only a single handler for this route
            if (routeRegistration.Value.Count == 1)
            {
                this.RegisterHandler(routeCollection, routeRegistration.Value[0].Item1, routeRegistration.Key, routeRegistration.Value[0].Item2.Localised, routeRegistration.Value[0].Item2.Personalised, routeRegistration.Value[0].Item2.RequestTypes, 0);
                return;
            }

            // Else we have mutliple handlers for this route

            var handlersAndMethods = new List <Tuple <Type, RouteDefinition, HttpMethod> >();

            foreach (var handler in routeRegistration.Value)
            {
                var handledMethods = handlerCache.GetHandledMethods(handler.Item1);
                handlersAndMethods.Add(new Tuple <Type, RouteDefinition, HttpMethod>(handler.Item1, handler.Item2, handledMethods));
            }

            var orderedEnumerable = handlersAndMethods.OrderBy(x => (x.Item3 != 0 ? "0" : "1") + (x.Item2.RequestTypes > 0 ? "0" : "1"));

            foreach (var handler in orderedEnumerable)
            {
                this.RegisterHandler(routeCollection, handler.Item1, routeRegistration.Key, handler.Item2.Localised, handler.Item2.Personalised, handler.Item2.RequestTypes, handler.Item3);
            }
        }