public void DispatchMessages(IReadQueue readQueue) { if (readQueue == null) { throw new ArgumentNullException("readQueue"); } object message; while (readQueue.TryDequeue(out message)) { var messageType = message.GetType(); var dispatchMethod = DispatchMessageOfTypeMethod.MakeGenericMethod(messageType); dispatchMethod.Invoke(this, new[] { message }); _applicationEventDispatcher.DispatchApplicationEvents(); } _applicationEventDispatcher.DispatchApplicationEvents(); }