Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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))));
        }
Exemplo n.º 3
0
        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))));
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 public void OnSchedule(ScheduledCommandInterceptor <TAggregate> segment) =>
 onSchedule.Insert(0, segment);
Exemplo n.º 7
0
 public void OnDeliver(ScheduledCommandInterceptor <TAggregate> segment) =>
 onDeliver.Insert(0, segment);