public static IPipe <CompensateActivityContext <TActivity, TLog> > Build <TActivity, TLog>( this IEnumerable <IPipeSpecification <CompensateActivityContext <TActivity, TLog> > > pipeSpecifications, IFilter <CompensateActivityContext <TActivity, TLog> > consumeFilter) where TActivity : class, CompensateActivity <TLog> where TLog : class { var builder = new CompensateActivityPipeBuilder <TActivity, TLog>(); foreach (IPipeSpecification <CompensateActivityContext <TActivity, TLog> > specification in pipeSpecifications) { specification.Apply(builder); } CompensateActivityPipeBuilder <TActivity, TLog> builders = builder; if (builders == null) { throw new InvalidOperationException("Should not be null, ever"); } return(Pipe.New <CompensateActivityContext <TActivity, TLog> >(x => { foreach (IFilter <CompensateActivityContext <TActivity, TLog> > filter in builders.Filters) { x.UseFilter(filter); } x.UseFilter(consumeFilter); })); }
public static IPipe <RequestContext> Build <TActivity, TLog>( this IEnumerable <IPipeSpecification <CompensateActivityContext <TActivity, TLog> > > pipeSpecifications, IFilter <RequestContext <CompensateActivityContext <TActivity, TLog> > > consumeFilter) where TActivity : class, CompensateActivity <TLog> where TLog : class { var builder = new CompensateActivityPipeBuilder <TActivity, TLog>(); foreach (IPipeSpecification <CompensateActivityContext <TActivity, TLog> > specification in pipeSpecifications) { specification.Apply(builder); } CompensateActivityPipeBuilder <TActivity, TLog> builders = builder; if (builders == null) { throw new InvalidOperationException("Should not be null, ever"); } return(Pipe.New <RequestContext>(cfg => { cfg.UseDispatch(new RequestConverterFactory(), d => { d.Handle <CompensateActivityContext <TActivity, TLog> >(h => { AddFilters(builders, h); h.UseFilter(consumeFilter); }); }); })); }
static void AddFilters <TActivity, TLog>(CompensateActivityPipeBuilder <TActivity, TLog> builders, IPipeConfigurator <RequestContext <CompensateActivityContext <TActivity, TLog> > > h) where TActivity : class, CompensateActivity <TLog> where TLog : class { foreach (IFilter <CompensateActivityContext <TActivity, TLog> > filter in builders.Filters) { var filterSpecification = new FilterPipeSpecification <CompensateActivityContext <TActivity, TLog> >(filter); var pipeSpecification = new SplitFilterPipeSpecification <RequestContext <CompensateActivityContext <TActivity, TLog> >, CompensateActivityContext <TActivity, TLog> >( filterSpecification, (input, context) => input, context => context.Request); h.AddPipeSpecification(pipeSpecification); } }