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