private void Add <T>(ISequencedHandler handler, Type handlerType)
        {
            List <ISequencedHandler> routes;

            if (!this.registeredRoutes.TryGetValue(typeof(T), out routes))
            {
                routes = new List <ISequencedHandler>();
            }

            if (this.registeredHandlers.Contains(handlerType))
            {
                var index = routes.FindIndex(x => x.HandlerType == handlerType);
                if (index >= 0)
                {
                    Log.Debug("Handler of type '{0}' already registered, replacing previously registered handler.", handlerType);
                    routes[index] = handler;
                }
            }
            else
            {
                routes.Add(handler);
            }

            if (handlerType != null)
            {
                this.registeredHandlers.Add(handlerType);
            }

            this.registeredRoutes[typeof(T)] = routes.OrderBy(x => x.Sequence).ToList();
        }
        private static bool TryRoute(ISequencedHandler route, IHandlerContext context, object message)
        {
            try
            {
                return(route.Handle(context, message));
            }
            catch (AbortCurrentHandlerException e)
            {
                Log.Debug("Aborting executing of current handler of type '{0}' because of: {1}",
                          route.HandlerType, e.Message);

                return(true);
            }
        }