Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
                }
            }
        }