ISystemClock は廃止されました

Microsoft.AspNetCore.Authentication.ISystemClock は、バージョン 1.0 以降、有効期限のチェックなどの時間関連機能の単体テストを実施できるように、ASP.NET Core の認証コンポーネントと ID コンポーネントによって使用されてきました。 .NET 8 には、同じ機能や多くの機能を備えた適切な抽象化である System.TimeProvider が含まれています。 この機会を利用して、ASP.NET Core ライブラリ全体で ISystemClock を廃止して、TimeProvider に置き換えます。

導入されたバージョン

ASP.NET Core 8.0 Preview 5

以前の動作

ISystemClock が、依存関係挿入 (DI) によって、認証コンポーネントと ID コンポーネントのコンストラクターに挿入されました。また、テスト用にオーバーライドされた可能性があります。

書式設定を容易にするために、既定の SystemClock の実装は、最も近い秒に切り捨てられます。

新しい動作

ISystemClockSystemClock、および ISystemClock を持つ認証ハンドラーが古いものとしてマークされました。 コードでこれらの API を使用すると、コンパイル時に警告が生成されます。

ISystemClock は依存関係挿入コンテナーに残っていますが、使用されなくなりました。 今後のバージョンでコンテナーから削除される可能性があります。

TimeProvider は、認証コンポーネントと ID コンポーネントの Options クラス上で設定可能なプロパティとなりました。 これは、直接設定することも、依存関係挿入コンテナーにプロバイダーを登録して設定することもできます。

TimeProvider は、最も近い秒に切り捨てられません。 コンシューマーは、必要に応じて時刻を正しく書式設定するように期待されています。

破壊的変更の種類

この変更は、"ソースの互換性" に影響します。

変更理由

この変更は、テストを容易にするために、スタック全体で時間抽象化を統一するために実施されました。

Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions> または Microsoft.AspNetCore.Identity.SecurityStampValidator<TUser> から派生するコンポーネントがある場合は、ISystemClock コンストラクター パラメーターを削除して、それに応じて新しいベース コンストラクターを呼び出します。

- public BasicAuthenticationHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock)
-     : base(options, logger, encoder, clock)
+ public BasicAuthenticationHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory logger, UrlEncoder encoder)
+     : base(options, logger, encoder)

同様に、これらの型で Clock プロパティを参照する派生実装は、新しい TimeProvider プロパティを代わりに参照する必要があります。

- var currentUtc = Clock.UtcNow;
+ var currentUtc = TimeProvider.GetUtcNow();

TimeProvider は、オプションに対する、または DI を介したテスト用に設定できます。

影響を受ける API