Esempio n. 1
0
        /// <summary>
        /// Executes the configured pipeline.
        /// </summary>
        /// <param name="parameter">The input that will be provided to all middleware.</param>
        public void Execute(TParameter parameter)
        {
            if (MiddlewareTypes.Count == 0)
            {
                return;
            }

            int index = 0;
            Action <TParameter> action = null;

            action = (param) =>
            {
                var type       = MiddlewareTypes[index];
                var middleware = (IMiddleware <TParameter>)MiddlewareResolver.Resolve(type);

                index++;
                if (index == MiddlewareTypes.Count)
                {
                    action = (p) => { }
                }
                ;

                middleware.Run(param, action);
            };

            action(parameter);
        }
    }
Esempio n. 2
0
        /// <summary>
        /// Execute the configured pipeline.
        /// </summary>
        /// <param name="parameter"></param>
        public async Task Execute(TParameter parameter)
        {
            if (MiddlewareTypes.Count == 0)
            {
                return;
            }

            int index = 0;
            Func <TParameter, Task> action = null;

            action = async(param) =>
            {
                var type            = MiddlewareTypes[index];
                var firstMiddleware = (IAsyncMiddleware <TParameter>)MiddlewareResolver.Resolve(type);

                index++;
                if (index == MiddlewareTypes.Count)
                {
                    action = async(p) => { }
                }
                ;

                await firstMiddleware.Run(param, action);
            };

            await action(parameter);
        }
    }
Esempio n. 3
0
        /// <summary>
        /// Executes the configured chain of responsibility.
        /// </summary>
        /// <param name="parameter"></param>
        public async Task <TReturn> Execute(TParameter parameter)
        {
            if (MiddlewareTypes.Count == 0)
            {
                return(default(TReturn));
            }

            int index = 0;
            Func <TParameter, Task <TReturn> > func = null;

            func = (param) =>
            {
                var type       = MiddlewareTypes[index];
                var middleware = (IAsyncMiddleware <TParameter, TReturn>)MiddlewareResolver.Resolve(type);

                index++;
                // If the current instance of middleware is the last one in the list,
                // the "next" function is assigned to the finally function or a
                // default empty function.
                if (index == MiddlewareTypes.Count)
                {
                    func = this._finallyFunc ?? ((p) => Task.FromResult(default(TReturn)));
                }

                return(middleware.Run(param, func));
            };

            return(await func(parameter));
        }
Esempio n. 4
0
        /// <summary>
        /// Execute the configured chain of responsibility.
        /// </summary>
        /// <param name="parameter"></param>
        public TReturn Execute(TParameter parameter)
        {
            if (MiddlewareTypes.Count == 0)
            {
                return(default(TReturn));
            }

            int index = 0;
            Func <TParameter, TReturn> func = null;

            func = (param) =>
            {
                var type       = MiddlewareTypes[index];
                var middleware = (IMiddleware <TParameter, TReturn>)MiddlewareResolver.Resolve(type);

                index++;
                // 如果当前实例中间件是列表中的最后一个,
                // “下一个”函数被赋值给最终函数或A。
                //默认空函数。
                if (index == MiddlewareTypes.Count)
                {
                    func = this._finallyFunc ?? ((p) => default(TReturn));
                }

                return(middleware.Run(param, func));
            };

            return(func(parameter));
        }
Esempio n. 5
0
        /// <summary>
        /// 执行配置的责任链。
        /// </summary>
        /// <param name="parameter"></param>
        public async Task <TReturn> Execute(TParameter parameter)
        {
            if (MiddlewareTypes.Count == 0)
            {
                return(default(TReturn));
            }

            int index = 0;
            Func <TParameter, Task <TReturn> > func = null;

            func = (param) =>
            {
                var type       = MiddlewareTypes[index];
                var middleware = (IAsyncMiddleware <TParameter, TReturn>)MiddlewareResolver.Resolve(type);

                index++;

                //如果中间件的当前实例是列表中的最后一个实例,
                //下一个函数被分配给最终函数或默认空函数。

                if (index == MiddlewareTypes.Count)
                {
                    func = this._finallyFunc ?? ((p) => Task.FromResult(default(TReturn)));
                }

                return(middleware.Run(param, func));
            };

            return(await func(parameter));
        }
        public void ApplyTo(ISchema schema)
        {
            schema.AllTypes.Apply(item =>
            {
                var complex = item as IComplexGraphType;
                complex?.Fields.Apply(field =>
                {
                    var resolver = new MiddlewareResolver(field.Resolver);

                    FieldMiddlewareDelegate app = context => resolver.Resolve(context);
                    app = Build(app);

                    field.Resolver = new FuncFieldResolver<Task<object>>(context => app.Invoke(context));
                });
            });
        }