// Choose public static SyncMiddleware <TContext, TResult> Choose <TContext, TResult>( this IEnumerable <SyncMiddleware <TContext, TResult> > choices, Func <TResult, TContext, bool> wasChosen, SyncMiddleware <TContext, TResult> defaultAction) => (context, next) => { foreach (var middleware in choices) { var result = middleware(context, next); if (wasChosen(result, context)) { return(result); } } return(defaultAction(context, next)); };
public static SyncMiddleware <TContext, TResult> Compose <TContext, TResult>( this SyncMiddleware <TContext, TResult> middleware, params SyncMiddleware <TContext, TResult>[] middlewares) => middleware.Singleton().Concat(middlewares).Compose();
public static SyncMiddlewareFunc <TContext, TResult> Combine <TContext, TResult>( this SyncMiddleware <TContext, TResult> middleware, SyncMiddlewareFunc <TContext, TResult> func) => context => middleware(context, func);