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); } }