public SchedulerClockRepository( Func<CommandSchedulerDbContext> createDbContext, GetClockName getClockName) { if (createDbContext == null) { throw new ArgumentNullException(nameof(createDbContext)); } if (getClockName == null) { throw new ArgumentNullException(nameof(getClockName)); } this.createDbContext = createDbContext; this.getClockName = getClockName; }
public SchedulerClockRepository( Func <CommandSchedulerDbContext> createDbContext, GetClockName getClockName) { if (createDbContext == null) { throw new ArgumentNullException(nameof(createDbContext)); } if (getClockName == null) { throw new ArgumentNullException(nameof(getClockName)); } this.createDbContext = createDbContext; this.getClockName = getClockName; }
/// <summary> /// Initializes a new instance of the <see cref="SqlCommandScheduler" /> class. /// </summary> /// <param name="configuration">The configuration.</param> public SqlCommandScheduler( Configuration configuration, Func<CommandSchedulerDbContext> createCommandSchedulerDbContext = null, GetClockName getClockName = null) { if (configuration == null) { throw new ArgumentNullException("configuration"); } GetClockName = getClockName ?? (e => null); this.createCommandSchedulerDbContext = createCommandSchedulerDbContext ?? (() => new CommandSchedulerDbContext()); var container = configuration.Container; var dispatchers = ConfigurationExtensions.InitializeSchedulersPerAggregateType( container, ClockName, activity); base.binders = dispatchers; ClockTrigger = new SchedulerClockTrigger( this.createCommandSchedulerDbContext, async (scheduled, result, db) => { var dispatcher = dispatchers.SingleOrDefault(d => d.AggregateType == scheduled.AggregateType); if (dispatcher != null) { await dispatcher.Deliver(scheduled); result.Add(scheduled.Result); } scheduled.Attempts++; await db.SaveChangesAsync(); }); clockRepository = new SchedulerClockRepository( this.createCommandSchedulerDbContext, GetClockName); }
/// <summary> /// Initializes a new instance of the <see cref="SqlCommandScheduler" /> class. /// </summary> /// <param name="configuration">The configuration.</param> public SqlCommandScheduler( Configuration configuration, Func <CommandSchedulerDbContext> createCommandSchedulerDbContext = null, GetClockName getClockName = null) { if (configuration == null) { throw new ArgumentNullException("configuration"); } GetClockName = getClockName ?? (e => null); this.createCommandSchedulerDbContext = createCommandSchedulerDbContext ?? (() => new CommandSchedulerDbContext()); var container = configuration.Container; var dispatchers = ConfigurationExtensions.InitializeSchedulersPerAggregateType( container, ClockName, activity); base.binders = dispatchers; ClockTrigger = new SchedulerClockTrigger( this.createCommandSchedulerDbContext, async(scheduled, result, db) => { var dispatcher = dispatchers.SingleOrDefault(d => d.AggregateType == scheduled.AggregateType); if (dispatcher != null) { await dispatcher.Deliver(scheduled); result.Add(scheduled.Result); } scheduled.Attempts++; await db.SaveChangesAsync(); }); clockRepository = new SchedulerClockRepository( this.createCommandSchedulerDbContext, GetClockName); }
internal static ICommandSchedulerDispatcher[] InitializeSchedulersPerAggregateType( PocketContainer container, GetClockName getClockName, ISubject<ICommandSchedulerActivity> subject) { var binders = AggregateType.KnownTypes .Select(aggregateType => { var initializerType = typeof (SchedulerInitializer<>).MakeGenericType(aggregateType); dynamic initializer = container.Resolve(initializerType); return (ICommandSchedulerDispatcher) initializer.InitializeScheduler( subject, container, getClockName); }) .ToArray(); return binders; }