protected void VerifyPhases(IAsyncPipelineBuilder<int> builder, Func<List<Func<IServiceProvider, int, CancellationToken, Task<int>>>, bool> verification) { // Workaround for exposing an internal type if (!(builder is AsyncPipelineBuilder<int> asyncBuilder)) throw new Exception($"Builder must be of type {nameof(AsyncPipelineBuilder<int>)}"); verification(asyncBuilder.Build()).Should().BeTrue(); }
public static IAsyncPipelineBuilder <TContext> Use <TContext>(this IAsyncPipelineBuilder <TContext> builder, Func <TContext, Func <Task>, Task> func) { return(builder.Use(next => context => { return func(context, () => next(context)); })); }
public static IAsyncPipelineBuilder <TContext> When <TContext>(this IAsyncPipelineBuilder <TContext> builder, Func <TContext, bool> predict, Action <IAsyncPipelineBuilder <TContext> > configureAction) { builder.Use((context, next) => { if (predict.Invoke(context)) { var branchPipelineBuilder = builder.New(); configureAction(branchPipelineBuilder); var branchPipeline = branchPipelineBuilder.Build(); return(branchPipeline.Invoke(context)); } return(next()); }); return(builder); }
public static IAsyncPipelineBuilder <TContext> Run <TContext>(this IAsyncPipelineBuilder <TContext> builder, Func <TContext, Task> handler) { return(builder.Use(_ => handler)); }
public IAsyncPipelineBuilder Add(IAsyncPipelineBuilder asyncPipeline) { _asyncPipelineBuilderCollection.Add(asyncPipeline); return(asyncPipeline); }