Sto leggendo i sorgenti .NET4 (possono essere scaricati gratuitamente per la ricerca) e ho trovato qualcosa di strano nell'implementazione di System.Web.Security.FormsAuthenticationModule
.Come si suppone che questo codice in FormsAuthenticationModule funzioni?
La classe è dichiarata in questo modo:
public sealed class FormsAuthenticationModule : IHttpModule
dove IHttpModule
ha due metodi - Init()
e Dispose()
.
All'interno OnEnter()
ci sei queste righe:
// Step 2: Call OnAuthenticate virtual method to create
// an IPrincipal for this request
OnAuthenticate(new FormsAuthenticationEventArgs(context));
dove OnAuthenticate()
è dichiarato come questo:
// OnAuthenticate: Forms Authentication modules can override
// this method to create a Forms IPrincipal object from
// a WindowsIdentity
private void OnAuthenticate(FormsAuthenticationEventArgs e) {
Ora la classe è sealed
, quindi è impossibile ereditare da. Anche OnAuthenticate()
non è virtual
quindi non vedo come avrebbe potuto essere comunque sovrascritto.
Quindi sembra che questi commenti siano appena superati e che la sostituzione di OnAuthenticate()
non sia più possibile.
Ho sbagliato qualcosa? Questo codice potrebbe consentire la sostituzione di OnAuthenticate()
?
AFAIU Questa classe è sigillata proprio dal [inizio] (http://msdn.microsoft.com/ us/library/system.web.security.formsauthenticationmodule (v = vs.71) .aspx) –
Dal nome e dai parametri segue che questo è un '' evento trigger '' (http://stackoverflow.com/a/ 2448530/60761), dovrebbero normalmente essere virtuali. Questo ovviamente è in conflitto con il sigillato. Nel peggiore dei casi una classe potrebbe iscriversi ai propri eventi. –