public static Configuration UseSqlStorageForScheduledCommands( this Configuration configuration) { configuration.IsUsingInMemoryCommandScheduling(false); var container = configuration.Container; container.RegisterDefaultClockName() .Register <ISchedulerClockRepository>( c => c.Resolve <SchedulerClockRepository>()) .Register <IETagChecker>( c => c.Resolve <SqlEventStoreEventStoreETagChecker>()) .Register <ISchedulerClockTrigger>( c => c.Resolve <SchedulerClockTrigger>()); configuration.Container .Resolve <SqlCommandSchedulerPipelineInitializer>() .Initialize(configuration); var commandSchedulerResolver = new CommandSchedulerResolver(container); container .Register( c => new SchedulerClockTrigger( c.Resolve <CommandSchedulerDbContext>, async(serializedCommand, result, db) => { await DeserializeAndDeliver(commandSchedulerResolver, serializedCommand, db); result.Add(serializedCommand.Result); })) .Register <ISchedulerClockTrigger>(c => c.Resolve <SchedulerClockTrigger>()); return(configuration); }
private static async Task DeserializeAndDeliver( CommandSchedulerResolver schedulerResolver, ScheduledCommand serializedCommand, CommandSchedulerDbContext db) { dynamic scheduler = schedulerResolver.ResolveSchedulerForAggregateTypeNamed(serializedCommand.AggregateType); await Storage.DeserializeAndDeliverScheduledCommand( serializedCommand, scheduler); serializedCommand.Attempts++; await db.SaveChangesAsync(); }