DI registration — System Clock stack
Confirms what AddPrimeClock registers in a Microsoft DI container for the KZDev.SystemClock.PrimeTime package and that IPrimeClock and IPrimeTime resolve to the same singleton instance.
ServiceCollection services = [];
services.AddPrimeClock();
using ServiceProvider serviceProvider = services.BuildServiceProvider();
IPrimeClock primeClock = serviceProvider.GetRequiredService<IPrimeClock>();
IPrimeTime primeTime = serviceProvider.GetRequiredService<IPrimeTime>();
TimeProvider timeProvider = serviceProvider.GetRequiredService<TimeProvider>();
ScenarioConsole.WriteLine($"IPrimeClock: {primeClock.GetType().Name}");
ScenarioConsole.WriteLine($"IPrimeTime resolves same singleton: {ReferenceEquals(primeClock, primeTime)}");
ScenarioConsole.WriteLine($"TimeProvider registered: {timeProvider.GetType().Name}");
return Task.CompletedTask;
What to notice
AddPrimeClockis idempotent forTimeProvider— if you already registered one (for example a fake),AddPrimeClockwill not overwrite it.IPrimeTimeis registered as a factory that returns the same singleton resolved forIPrimeClock— both abstractions share state.TimeProvideris the BCL clock surface this stack consumes; tests can inject a customTimeProvider(or usePrimeTestClock) to control time.
Related
- DI replacement with
AddPrimeTestClock— how tests substitute virtual time via DI. - Concepts: Choosing a package
- Usage guide: KZDev.SystemClock.PrimeTime
- API:
IPrimeClock·IPrimeTime