Skip to content

Commit 06dbfac

Browse files
committed
feat(scheduling): add RegisterSchedulerServices DI extension
1 parent aa7574c commit 06dbfac

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using DryIoc;
2+
using SquidStd.Abstractions.Extensions.Config;
3+
using SquidStd.Abstractions.Extensions.Services;
4+
using SquidStd.Core.Data.Timing;
5+
using SquidStd.Core.Interfaces.Scheduling;
6+
using SquidStd.Services.Core.Services.Scheduling;
7+
8+
namespace SquidStd.Services.Core.Extensions;
9+
10+
/// <summary>
11+
/// Extension methods for registering the SquidStd cron scheduler.
12+
/// </summary>
13+
public static class RegisterSchedulerServicesExtension
14+
{
15+
/// <param name="container">Container that receives the scheduler registrations.</param>
16+
extension(IContainer container)
17+
{
18+
/// <summary>
19+
/// Registers the timer wheel pump and the cron scheduler. Must be called after
20+
/// <c>RegisterCoreServices</c> so that <c>ITimerService</c> and <c>IJobSystem</c> exist.
21+
/// </summary>
22+
/// <returns>The same container for chaining.</returns>
23+
public IContainer RegisterSchedulerServices()
24+
{
25+
container.RegisterConfigSection("timerWheelPump", static () => new TimerWheelPumpConfig(), -90);
26+
container.RegisterStdService<TimerWheelPumpService, TimerWheelPumpService>(-1);
27+
container.RegisterStdService<ICronScheduler, CronSchedulerService>(-1);
28+
29+
return container;
30+
}
31+
}
32+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using DryIoc;
2+
using SquidStd.Core.Data.Jobs;
3+
using SquidStd.Core.Data.Timing;
4+
using SquidStd.Core.Interfaces.Jobs;
5+
using SquidStd.Core.Interfaces.Scheduling;
6+
using SquidStd.Core.Interfaces.Timing;
7+
using SquidStd.Services.Core.Extensions;
8+
using SquidStd.Services.Core.Services;
9+
using SquidStd.Services.Core.Services.Scheduling;
10+
11+
namespace SquidStd.Tests.Services.Core.Scheduling;
12+
13+
public class CronSchedulerRegistrationTests
14+
{
15+
[Fact]
16+
public void RegisterSchedulerServices_ResolvesSchedulerAndPump()
17+
{
18+
var container = new Container();
19+
container.RegisterInstance(new TimerWheelConfig());
20+
container.RegisterInstance(new TimerWheelPumpConfig());
21+
container.RegisterInstance(new JobsConfig { WorkerThreadCount = 1 });
22+
container.Register<ITimerService, TimerWheelService>(Reuse.Singleton);
23+
container.Register<IJobSystem, JobSystemService>(Reuse.Singleton);
24+
25+
container.RegisterSchedulerServices();
26+
27+
Assert.NotNull(container.Resolve<ICronScheduler>());
28+
Assert.NotNull(container.Resolve<TimerWheelPumpService>());
29+
}
30+
}

0 commit comments

Comments
 (0)