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
AddPrimeClockis idempotent forNodaTime.IClock— if you already registered one (for example a fakeIClock),AddPrimeClockwill not overwrite it.IPrimeTimeis registered as a factory that returns the same singleton resolved forIPrimeClock— both abstractions share state.NodaTime.IClockis the upstream NodaTime clock surface that the PrimeTime stack consumes; tests can inject a customIClock(or usePrimeTestClock) to control time.
Related
- DI replacement with
AddPrimeTestClock— how tests substitute virtual time via DI. - Concepts: Choosing a package
- Usage guide: KZDev.PrimeTime
- API:
IPrimeClock·IPrimeTime