Share via


ISystemClock is verouderd

Microsoft.AspNetCore.Authentication.ISystemClock is gebruikt door de verificatie- en identiteitsonderdelen van ASP.NET Core sinds versie 1.0 om eenheidstests van tijdgerelateerde functionaliteit mogelijk te maken, zoals verloopcontrole. .NET 8 bevat een geschikte abstractie, System.TimeProviderdie dezelfde functionaliteit biedt en nog veel meer. We nemen deze kans om te verouderd ISystemClock en vervangen door TimeProvider de ASP.NET Core-bibliotheken.

Versie geïntroduceerd

ASP.NET Core 8.0 Preview 5

Vorig gedrag

ISystemClock is geïnjecteerd in de constructors van de verificatie- en identiteitsonderdelen door afhankelijkheidsinjectie (DI) en kan worden overschreven voor testen.

De standaard SystemClock implementatie is afgekapt tot de dichtstbijzijnde seconde voor eenvoudigere opmaak.

Nieuw gedrag

ISystemClock, SystemClocken de verificatiehandlerconstructors met een ISystemClock parameter zijn gemarkeerd als verouderd. Als u deze API's in code gebruikt, wordt tijdens het compileren een waarschuwing gegenereerd.

ISystemClock blijft in de container voor afhankelijkheidsinjectie, maar wordt niet meer gebruikt. Deze kan in een toekomstige versie uit de container worden verwijderd.

TimeProvider is nu een settable-eigenschap voor de Options klassen voor de verificatie- en identiteitsonderdelen. Het kan rechtstreeks worden ingesteld of door een provider te registreren in de container voor afhankelijkheidsinjectie.

TimeProvider wordt niet afgekapt tot de dichtstbijzijnde seconde. Gebruikers zullen naar verwachting de tijd correct opmaken als dat nodig is.

Type wijziging die fouten veroorzaken

Deze wijziging is van invloed op de broncompatibiliteit.

Reden voor wijziging

Deze wijziging is aangebracht om tijdabstractie in de stack te samenvoegen voor eenvoudiger testen.

Als u onderdelen hebt die zijn afgeleid van Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions> of Microsoft.AspNetCore.Identity.SecurityStampValidator<TUser>, verwijdert u de ISystemClock constructorparameter en roept u de nieuwe basisconstructor dienovereenkomstig aan.

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

Op dezelfde manier moeten afgeleide implementaties die naar de Clock eigenschap op deze typen verwijzen, in plaats daarvan verwijzen naar de nieuwe TimeProvider eigenschap.

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

U kunt instellen TimeProvider voor testen op de opties of via DI.

Betrokken API's