/// <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); } }
/// <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); } }
/// <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)); }
/// <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)); }
/// <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)); }); }); }