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; }
internal 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(); }