Beispiel #1
0
        public FilterAttachedAsyncRequestHandler(IAsyncRequestHandlerCore <TRequest, TResponse> body, IEnumerable <AsyncRequestHandlerFilter <TRequest, TResponse> > filters)
        {
            Func <TRequest, CancellationToken, UniTask <TResponse> > next = body.InvokeAsync;

            foreach (var f in filters.OrderByDescending(x => x.Order))
            {
                next = new AsyncRequestHandlerFilterRunner <TRequest, TResponse>(f, next).GetDelegate();
            }

            this.handler = next;
        }
        public AsyncRequestAllHandler(IEnumerable <IAsyncRequestHandlerCore <TRequest, TResponse> > handlers, FilterAttachedAsyncRequestHandlerFactory handlerFactory, MessagePipeOptions options)
        {
            var collection = (handlers as ICollection <IAsyncRequestHandlerCore <TRequest, TResponse> >) ?? handlers.ToArray();

            var array = new IAsyncRequestHandlerCore <TRequest, TResponse> [collection.Count];
            var i     = 0;

            foreach (var item in collection)
            {
                array[i++] = handlerFactory.CreateAsyncRequestHandler(item);
            }

            this.handlers = array;
            this.defaultAsyncPublishStrategy = options.DefaultAsyncPublishStrategy;
        }
 public AsyncRequestHandler(IAsyncRequestHandlerCore <TRequest, TResponse> handler, FilterAttachedAsyncRequestHandlerFactory handlerFactory)
 {
     this.handler = handlerFactory.CreateAsyncRequestHandler <TRequest, TResponse>(handler);
 }
Beispiel #4
0
        public IAsyncRequestHandlerCore <TRequest, TResponse> CreateAsyncRequestHandler <TRequest, TResponse>(IAsyncRequestHandlerCore <TRequest, TResponse> handler)
        {
            var(globalLength, globalFilters)   = options.GetGlobalAsyncRequestHandlerFilters(provider, typeof(TRequest), typeof(TResponse));
            var(handlerLength, handlerFilters) = filterProvider.GetAttributeFilters(handler.GetType(), provider);

            if (globalLength != 0 || handlerLength != 0)
            {
                handler = new FilterAttachedAsyncRequestHandler <TRequest, TResponse>(handler, globalFilters.Concat(handlerFilters).Cast <AsyncRequestHandlerFilter <TRequest, TResponse> >());
            }

            return(handler);
        }