Sdílet prostřednictvím


ISystemClock je zastaralý

Microsoft.AspNetCore.Authentication.ISystemClock používá ASP.NET komponenty ověřování a identity core od verze 1.0 k povolení testování částí funkcí souvisejících s časem, jako je kontrola vypršení platnosti. .NET 8 obsahuje vhodnou abstrakci, System.TimeProviderkterá poskytuje stejné funkce a mnohem více. Tuto příležitost používáme k zastaralí ISystemClock a nahrazení TimeProvider v rámci knihoven ASP.NET Core.

Zavedená verze

ASP.NET Core 8.0 Preview 5

Předchozí chování

ISystemClock byla vložena do konstruktorů komponent ověřování a identity prostřednictvím injektáže závislostí (DI) a mohla by být přepsána pro účely testování.

Výchozí SystemClock implementace se zkrátila na nejbližší sekundu pro snadnější formátování.

Nové chování

ISystemClock, SystemClocka konstruktory obslužné rutiny ověřování, které mají ISystemClock parametr, byly označeny zastaralé. Použití těchto rozhraní API v kódu vygeneruje upozornění v době kompilace.

ISystemClock zůstává v kontejneru injektáže závislostí, ale už se nepoužívá. Může být odebrán z kontejneru v budoucí verzi.

TimeProvider je nyní nastavená vlastnost Options pro třídy pro komponenty ověřování a identity. Můžete ho nastavit přímo nebo registrací zprostředkovatele v kontejneru injektáže závislostí.

TimeProvider nezkrátí se na nejbližší sekundu. Očekává se, že uživatelé správně naformátují čas podle potřeby.

Typ zásadní změny

Tato změna má vliv na kompatibilitu zdroje.

Důvod změny

Tato změna byla provedena kvůli sjednocení abstrakce času v rámci zásobníku pro snadnější testování.

Pokud máte komponenty odvozené z Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions> nebo Microsoft.AspNetCore.Identity.SecurityStampValidator<TUser>, odeberte ISystemClock parametr konstruktoru a odpovídajícím způsobem volejte nový základní konstruktor.

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

Podobně odvozené implementace, které odkazují na Clock vlastnost na tyto typy by měly odkazovat na novou TimeProvider vlastnost místo.

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

Můžete nastavit TimeProvider testování možností nebo prostřednictvím DI.

Ovlivněná rozhraní API