Udostępnij za pośrednictwem


ISystemClock jest przestarzały

Microsoft.AspNetCore.Authentication.ISystemClock jest używany przez składniki uwierzytelniania i tożsamości ASP.NET Core od wersji 1.0, aby umożliwić testowanie jednostkowe funkcji związanych z czasem, takich jak sprawdzanie wygaśnięcia. Platforma .NET 8 zawiera odpowiednią abstrakcję , System.TimeProviderktóra udostępnia te same funkcje i wiele innych. Korzystamy z tej okazji do przestarzałej ISystemClock i zamieniamy ją TimeProvider na całe biblioteki ASP.NET Core.

Wprowadzona wersja

ASP.NET Core 8.0 (wersja zapoznawcza 5)

Poprzednie zachowanie

ISystemClock został wstrzyknięty do konstruktorów składników uwierzytelniania i tożsamości przez wstrzyknięcie zależności (DI) i może zostać zastąpiony do testowania.

Domyślna SystemClock implementacja obcinana do najbliższej sekundy w celu łatwiejszego formatowania.

Nowe zachowanie

ISystemClock, SystemClocki konstruktory programu obsługi uwierzytelniania, które mają ISystemClock parametr, zostały oznaczone jako przestarzałe. Użycie tych interfejsów API w kodzie spowoduje wygenerowanie ostrzeżenia w czasie kompilacji.

ISystemClock pozostaje w kontenerze wstrzykiwania zależności, ale nie jest już używany. Może zostać usunięty z kontenera w przyszłej wersji.

TimeProvider jest teraz właściwością settable w Options klasach dla składników uwierzytelniania i tożsamości. Można go ustawić bezpośrednio lub rejestrując dostawcę w kontenerze wstrzykiwania zależności.

TimeProvider nie obcina się do najbliższej sekundy. Użytkownicy powinni poprawnie sformatować czas zgodnie z potrzebami.

Typ zmiany powodującej niezgodność

Ta zmiana ma wpływ na zgodność ze źródłem.

Przyczyna wprowadzenia zmiany

Ta zmiana została wprowadzona w celu ujednolicenia abstrakcji czasu w stosie w celu ułatwienia testowania.

Jeśli masz składniki pochodzące z Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions> lub Microsoft.AspNetCore.Identity.SecurityStampValidator<TUser>, usuń parametr konstruktora ISystemClock i odpowiednio wywołaj nowy konstruktor podstawowy.

- 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)

Podobnie pochodne implementacje odwołujące się do Clock właściwości tych typów powinny odwoływać się do nowej TimeProvider właściwości.

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

Na potrzeby testowania można ustawić TimeProvider opcje lub za pośrednictwem di.

Dotyczy interfejsów API