//public static void GlobalRoutePreInvoke(int index, string type, string method, params object[] @params)
        //{
        //    if (!IsEnabled)
        //        return;

        //    if (PreListeners[index] != null)
        //    {
        //        var evtArgs = new EventArgsGlobalRouteManager(type, method, @params);
        //        foreach (var evt in PreListeners[index])
        //        {
        //            evt.Invoke(evtArgs);
        //        }
        //    }
        //}

        public static bool GlobalRoutePreInvoke(int index, string type, string method, out object output, params object[] @params)
        {
            output = null;

            if (!IsEnabled)
            {
                return(false);
            }

            if (PreListeners[index] == null)
            {
                return(false);
            }

            var evtArgs = new Arguments.GlobalRoute.EventArgsGlobalRouteReturnable(type, method, @params, output);

            foreach (var evt in PreListeners[index])
            {
                evt.Invoke(evtArgs);
            }

            output = evtArgs.Output;

            return(evtArgs.Cancel);
        }
        public static void GlobalRoutePostInvoke(int index, string type, string method, ref object output, params object[] @params)
        {
            if (!IsEnabled)
            {
                return;
            }

            if (PostListeners[index] != null)
            {
                var evtArgs = new Arguments.GlobalRoute.EventArgsGlobalRouteReturnable(type, method, @params, output);
                foreach (var evt in PostListeners[index])
                {
                    evt.Invoke(evtArgs);
                }

                output = evtArgs.Output;
            }
        }