示例#1
0
        public async Task Invoke(IMessageContext context, MiddlewareDelegate next)
        {
            var handlers = this.configuration
                           .HandlerMapping
                           .GetHandlersTypes(context.Message.Value.GetType());

            if (!handlers.Any())
            {
                this.configuration.OnNoHandlerFound(context);
            }
            else
            {
                await Task.WhenAll(
                    handlers
                    .Select(
                        handler =>
                        HandlerExecutor
                        .GetExecutor(context.Message.Value.GetType())
                        .Execute(
                            this.dependencyResolver.Resolve(handler),
                            context,
                            context.Message.Value)))
                .ConfigureAwait(false);
            }

            await next(context).ConfigureAwait(false);
        }
示例#2
0
        public async Task Invoke(IMessageContext context, MiddlewareDelegate next)
        {
            using (var scope = this.dependencyResolver.CreateScope())
            {
                await Task.WhenAll(
                    this.configuration
                    .HandlerMapping
                    .GetHandlersTypes(context.Message.GetType())
                    .Select(t =>
                            HandlerExecutor
                            .GetExecutor(context.Message.GetType())
                            .Execute(
                                scope.Resolver.Resolve(t),
                                context,
                                context.Message)))
                .ConfigureAwait(false);
            }

            await next(context);
        }
示例#3
0
        public async Task Invoke(IMessageContext context, MiddlewareDelegate next)
        {
            using (var scope = this.dependencyResolver.CreateScope())
            {
                var handlerType = this.configuration.HandlerMapping.GetHandlerType(context.Message.GetType());

                if (handlerType == null)
                {
                    return;
                }

                var handler = scope.Resolver.Resolve(handlerType);

                await HandlerExecutor
                .GetExecutor(context.Message.GetType())
                .Execute(
                    handler,
                    context,
                    context.Message)
                .ConfigureAwait(false);
            }

            await next(context);
        }