NCode.SystemClock
1.0.1
Prefix Reserved
dotnet add package NCode.SystemClock --version 1.0.1
NuGet\Install-Package NCode.SystemClock -Version 1.0.1
<PackageReference Include="NCode.SystemClock" Version="1.0.1" />
paket add NCode.SystemClock --version 1.0.1
#r "nuget: NCode.SystemClock, 1.0.1"
// Install NCode.SystemClock as a Cake Addin #addin nuget:?package=NCode.SystemClock&version=1.0.1 // Install NCode.SystemClock as a Cake Tool #tool nuget:?package=NCode.SystemClock&version=1.0.1
Overview
Provides an abstraction of ISystemClock
to assist application testing along with implementations that support 1s and 1ms accuracy.
Problem Statement
Depending on the underlying Operating System, the accuracy of DateTime.UtcNow
on .NET Framework is around ~16ms due to the usage of the RTC. Some newer .NET
Frameworks use higher resolution timers such as QPC to obtain the highest level
of accuracy. This library provides implementations of ISystemClock
with consistent
1s and 1ms accuracy.
Contracts
/// <summary>
/// Abstracts the system clock to facilitate testing.
/// </summary>
public interface ISystemClock
{
/// <summary>
/// Retrieves the current system time in UTC.
/// </summary>
DateTimeOffset UtcNow { get; }
}
/// <summary>
/// Provides access to the normal system clock with accuracy in milliseconds.
/// </summary>
public interface ISystemClockMillisecondsAccuracy : ISystemClock
{
// nothing
}
public class SystemClockMillisecondsAccuracy : ISystemClockMillisecondsAccuracy { /* ... */ }
/// <summary>
/// Provides access to the normal system clock with accuracy in seconds.
/// </summary>
/// <remarks>
/// This implementation is particularly useful in JWT authentication because
/// <code>expires_in</code> only supports whole seconds and milliseconds do
/// not round-trip when serializing.
/// </remarks>
public interface ISystemClockSecondsAccuracy : ISystemClock
{
// nothing
}
public class SystemClockSecondsAccuracy : ISystemClockSecondsAccuracy { /* ... */ }
Usage
PM> Install-Package NCode.SystemClock
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<ISystemClockSecondsAccuracy, SystemClockSecondsAccuracy>();
services.AddTransient<ISystemClockMillisecondsAccuracy, SystemClockMillisecondsAccuracy>();
// or register ISystemClock with an explicit implementation
services.AddTransient<ISystemClock, SystemClockMillisecondsAccuracy>();
}
References
Release Notes
- v1.0.0 - Initial release
- v1.0.1 - Refresh build
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp1.0 was computed. netcoreapp1.1 was computed. netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard1.0 is compatible. netstandard1.1 was computed. netstandard1.2 was computed. netstandard1.3 was computed. netstandard1.4 was computed. netstandard1.5 was computed. netstandard1.6 was computed. netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net45 is compatible. net451 was computed. net452 was computed. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen30 was computed. tizen40 was computed. tizen60 was computed. |
Universal Windows Platform | uap was computed. uap10.0 was computed. |
Windows Phone | wp8 was computed. wp81 was computed. wpa81 was computed. |
Windows Store | netcore was computed. netcore45 was computed. netcore451 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.5
- No dependencies.
-
.NETStandard 1.0
- NETStandard.Library (>= 1.6.1)
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Built on 2023-07-16 20:16:08Z