Example #1
0
        private SchedulerMethod Create(int workerCount, IWorkGroup workGroup = null)
        {
            var fixture             = new Fixture().Customize(new AutoNSubstituteCustomization());
            var cancelWork          = fixture.Create <IQueueCancelWork>();
            var workerConfiguration = fixture.Create <IWorkerConfiguration>();

            workerConfiguration.WorkerCount.Returns(workerCount);

            fixture.Inject(cancelWork);
            fixture.Inject(workerConfiguration);


            cancelWork.CancellationTokenSource.Returns(new CancellationTokenSource());
            cancelWork.StopTokenSource.Returns(new CancellationTokenSource());

            var stopWorker = fixture.Create <StopWorker>();

            fixture.Inject(stopWorker);

            IConsumerQueueAsync queue = fixture.Create <ConsumerQueueAsync>();
            var fixture2 = new Fixture().Customize(new AutoNSubstituteCustomization());

            fixture2.Inject(queue);

            var factoryFactory = fixture2.Create <ITaskFactoryFactory>();

            fixture2.Inject(factoryFactory);

            IConsumerQueueScheduler scheduler = fixture2.Create <Scheduler>();

            fixture2.Inject(scheduler);

            ATaskScheduler schedule = new CreateContainerTest.TaskSchedulerNoOp();

            schedule.Start();
            fixture2.Inject(schedule);
            var taskFactory = fixture2.Create <ITaskFactory>();

            taskFactory.Scheduler.Returns(schedule);
            fixture2.Inject(taskFactory);

            factoryFactory.Create().Returns(taskFactory);

            if (workGroup != null)
            {
                fixture2.Inject(workGroup);
            }

            var handler = fixture2.Create <SchedulerMessageHandler>();

            fixture2.Inject(handler);

            return(fixture2.Create <SchedulerMethod>());
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="Scheduler" /> class.
        /// </summary>
        /// <param name="queue">The queue.</param>
        /// <param name="schedulerMessageHandler">The message handler.</param>
        /// <param name="factory">The factory.</param>
        /// <param name="workGroup">The work group.</param>
        public Scheduler(IConsumerQueueAsync queue,
                         ISchedulerMessageHandler schedulerMessageHandler,
                         ITaskFactoryFactory factory,
                         IWorkGroup workGroup)
        {
            Guard.NotNull(() => queue, queue);
            Guard.NotNull(() => schedulerMessageHandler, schedulerMessageHandler);
            Guard.NotNull(() => factory, factory);

            _queue = queue;
            _schedulerMessageHandler = schedulerMessageHandler;
            _taskFactory             = new Lazy <ITaskFactory>(factory.Create);

            //if the work group is not set, we are going to just treat it as null
            if (!string.IsNullOrEmpty(workGroup?.Name))
            {
                WorkGroup = workGroup;
            }
        }