/// <summary> /// Occurs when the message dispatcher is going to dispatch a message. /// </summary> /// <param name="e">The event data.</param> protected virtual void OnDispatching(MessageDispatchEventArgs e) { var temp = this.Dispatching; if (temp != null) { temp(this, e); } }
/// <summary> /// Dispatches the message. /// </summary> /// <param name="message">The message to be dispatched.</param> public virtual void DispatchMessage <T>(T message) { Type messageType = typeof(T); if (handlers.ContainsKey(messageType)) { var messageHandlers = handlers[messageType]; foreach (var messageHandler in messageHandlers) { var dynMessageHandler = (IHandler <T>)messageHandler; var evtArgs = new MessageDispatchEventArgs(message, messageHandler.GetType(), messageHandler); this.OnDispatching(evtArgs); try { dynMessageHandler.Handle(message); this.OnDispatched(evtArgs); } catch { this.OnDispatchFailed(evtArgs); } } } }