public static Configuration AddToCommandSchedulerPipeline <TAggregate>( this Configuration configuration, ScheduledCommandInterceptor <TAggregate> schedule = null, ScheduledCommandInterceptor <TAggregate> deliver = null) where TAggregate : class, IEventSourced { configuration.IsUsingCommandSchedulerPipeline(true); var pipeline = configuration.Container .Resolve <CommandSchedulerPipeline <TAggregate> >(); if (schedule != null) { pipeline.OnSchedule(schedule); } if (deliver != null) { pipeline.OnDeliver(deliver); } configuration.Container .Register(c => pipeline) .RegisterSingle(c => pipeline.Compose(configuration)); return(configuration); }
internal static ICommandScheduler <TAggregate> InterceptSchedule <TAggregate>( this ICommandScheduler <TAggregate> scheduler, ScheduledCommandInterceptor <TAggregate> schedule = null) { schedule = schedule ?? (async(c, next) => await next(c)); return(Create <TAggregate>( async command => await schedule(command, async c => await scheduler.Schedule(c)))); }
internal static ICommandDeliverer <TAggregate> InterceptDeliver <TAggregate>( this ICommandDeliverer <TAggregate> deliverer, ScheduledCommandInterceptor <TAggregate> deliver = null) { deliver = deliver ?? (async(c, next) => await next(c)); return(Create <TAggregate>( async command => await deliver(command, async c => await deliverer.Deliver(c)))); }
internal static ICommandScheduler <TAggregate> Wrap <TAggregate>( this ICommandScheduler <TAggregate> scheduler, ScheduledCommandInterceptor <TAggregate> schedule = null, ScheduledCommandInterceptor <TAggregate> deliver = null) { schedule = schedule ?? (async(c, next) => await next(c)); deliver = deliver ?? (async(c, next) => await next(c)); return(Create <TAggregate>( async command => await schedule(command, async c => await scheduler.Schedule(c)), async command => await deliver(command, async c => await scheduler.Deliver(c)))); }
protected override void InitializeFor <TAggregate>(Configuration configuration) { ScheduledCommandInterceptor <TAggregate> schedule = null; if (onScheduling != null || onScheduled != null) { onScheduling = onScheduling ?? delegate { }; onScheduled = onScheduled ?? delegate { }; schedule = async(cmd, next) => { onScheduling(cmd); await next(cmd); onScheduled(cmd); }; } ScheduledCommandInterceptor <TAggregate> deliver = null; if (onDelivering != null || onDelivered != null) { onDelivering = onDelivering ?? delegate { }; onDelivered = onDelivered ?? delegate { }; deliver = async(cmd, next) => { onDelivering(cmd); await next(cmd); onDelivered(cmd); }; } configuration.AddToCommandSchedulerPipeline( schedule: schedule, deliver: deliver); }
public void OnSchedule(ScheduledCommandInterceptor <TAggregate> segment) => onSchedule.Insert(0, segment);
public void OnDeliver(ScheduledCommandInterceptor <TAggregate> segment) => onDeliver.Insert(0, segment);