public async Task SendAsync(object message) { var route = _messageRoutes.GetRoute(message.GetType()); if (route.Actions.Length > 1) { throw new ArgumentException( $"The message '{route.MessageType.FullName}' gave more than one route. This does not make sense in a Send scenario. Use Publish for that or inspect your registered handlers.", nameof(message)); } var action = route.Actions[0]; var envelope = new MessageEnvelope(message, route.MessageType); OnBeforeRouting?.Invoke(envelope); try { var handler = _messageHandlerCreator(action.HandlerType, envelope); var resultingTask = (Task)action.Invoke(handler, envelope.Message); await resultingTask.ConfigureAwait(false); } finally { OnAfterRouted?.Invoke(envelope); } }
public async Task RouteAsync <T>(T message) { var route = _messageRoutes.GetRoute(message.GetType()); var envelope = new MessageEnvelope(message, route.MessageType); if (!_middlewares.Any()) { foreach (var action in route.Actions) { var handler = _messageHandlerCreator(action.HandlerType, envelope); var resultingTask = (Task)action.Invoke(handler, envelope.Message); await resultingTask.ConfigureAwait(false); } } else { foreach (var action in route.Actions) { await ProcessAsync( envelope, async e => { var handler = _messageHandlerCreator(action.HandlerType, envelope); var resultingTask = (Task)action.Invoke(handler, envelope.Message); await resultingTask.ConfigureAwait(false); } ).ConfigureAwait(false); } } }
public async Task RouteAsync <T>(T message) { var messageType = message.GetType(); var route = _messageRoutes.GetRoute(messageType); var envelope = new MessageEnvelope(message, messageType); foreach (var action in route.Actions) { await action.Invoke(_messageHandlerCreator(action.HandlerType, envelope), envelope.Message).ConfigureAwait(false); } }
public async Task RouteAsync <T>(T message) { var route = _messageRoutes.GetRoute(message.GetType()); var envelope = new MessageEnvelope(message, route.MessageType); OnBeforeRouting?.Invoke(envelope); try { foreach (var action in route.Actions) { await action.Invoke(_messageHandlerCreator(action.HandlerType, envelope), envelope.Message).ConfigureAwait(false); } } finally { OnAfterRouted?.Invoke(envelope); } }
public async Task RouteAsync <T>(T message) { var messageType = message.GetType(); var route = _messageRoutes.GetRoute(messageType); var envelope = new MessageEnvelope(message, messageType); if (!_middlewares.Any()) { foreach (var action in route.Actions) { await action.Invoke(_messageHandlerCreator(action.HandlerType, envelope), envelope.Message).ConfigureAwait(false); } } else { foreach (var action in route.Actions) { await ProcessAsync( envelope, async e => await action.Invoke(_messageHandlerCreator(action.HandlerType, envelope), envelope.Message).ConfigureAwait(false)).ConfigureAwait(false); } } }