Table of Contents

DI registration — PrimeTime (NodaTime) stack

Confirms what AddPrimeClock registers in a Microsoft DI container for the KZDev.PrimeTime package and that IPrimeClock, IPrimeTime, and the NodaTime IClock are all available.

ServiceCollection services = [];
services.AddPrimeClock();

using ServiceProvider serviceProvider = services.BuildServiceProvider();

IPrimeClock primeClock = serviceProvider.GetRequiredService<IPrimeClock>();
IPrimeTime primeTime = serviceProvider.GetRequiredService<IPrimeTime>();
IClock nodaClock = serviceProvider.GetRequiredService<IClock>();

ScenarioConsole.WriteLine($"IPrimeClock: {primeClock.GetType().Name}");
ScenarioConsole.WriteLine($"IPrimeTime resolves same singleton: {ReferenceEquals(primeClock, primeTime)}");
ScenarioConsole.WriteLine($"Noda IClock registered: {nodaClock.GetType().Name}");

return Task.CompletedTask;

What to notice

  • AddPrimeClock is idempotent for NodaTime.IClock — if you already registered one (for example a fake IClock), AddPrimeClock will not overwrite it.
  • IPrimeTime is registered as a factory that returns the same singleton resolved for IPrimeClock — both abstractions share state.
  • NodaTime.IClock is the upstream NodaTime clock surface that the PrimeTime stack consumes; tests can inject a custom IClock (or use PrimeTestClock) to control time.