Condividi tramite


ISystemClock è obsoleto

Microsoft.AspNetCore.Authentication.ISystemClock è stato usato dai componenti di autenticazione e identità di ASP.NET Core dalla versione 1.0 per abilitare unit test delle funzionalità correlate al tempo, ad esempio il controllo della scadenza. .NET 8 include un'astrazione appropriata, System.TimeProvider, che fornisce le stesse funzionalità e molto altro ancora. Questa opportunità è stata usata per contrassegnare ISystemClock come obsoleto e sostituirlo con TimeProvider in tutte le librerie ASP.NET Core.

Versione introdotta

ASP.NET Core 8.0 Preview 5

Comportamento precedente

ISystemClock veniva inserito nei costruttori dei componenti di autenticazione e identità tramite inserimento delle dipendenze (DI) e poteva essere sottoposto a override per i test.

L'implementazione predefinita di SystemClock veniva troncata al secondo più vicino per semplificare la formattazione.

Nuovo comportamento

ISystemClock, SystemClock e i costruttori del gestore di autenticazione con un parametro ISystemClock sono stati contrassegnati come obsoleti. L'uso di queste API nel codice genererà un avviso in fase di compilazione.

ISystemClock rimane nel contenitore di inserimento delle dipendenze, ma non viene più usato. Potrebbe essere rimosso dal contenitore in una versione futura.

TimeProvider è ora una proprietà impostabile nelle classi Options per i componenti di autenticazione e identità. Può essere impostato direttamente o registrando un provider nel contenitore di inserimento delle dipendenze.

TimeProvider non viene troncato al secondo più vicino. I consumer devono formattare correttamente il tempo in base alla necessità.

Tipo di modifica che causa un'interruzione

Questa modifica influisce sulla compatibilità dell'origine.

Motivo della modifica

Questa modifica è stata apportata per unificare l'astrazione temporale nello stack per semplificare i test.

Se sono presenti componenti che derivano da Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions> o Microsoft.AspNetCore.Identity.SecurityStampValidator<TUser>, rimuovere il parametro del costruttore ISystemClock e chiamare di conseguenza il nuovo costruttore di base.

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

Analogamente, le implementazioni derivate che fanno riferimento alla proprietà Clock in questi tipi devono fare riferimento alla nuova proprietà TimeProvider.

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

È possibile impostare TimeProvider per i test sulle opzioni o tramite inserimento delle dipendenze.

API interessate