2013-03-04 14 views
5

Czytam źródła .NET4 (można je pobrać do badań swobodnie) i znalazłem coś dziwnego w realizacji System.Web.Security.FormsAuthenticationModule.W jaki sposób powinien działać ten kod w module FormsAuthenticationModule?

Klasa jest zadeklarowana następująco:

public sealed class FormsAuthenticationModule : IHttpModule 

gdzie IHttpModule ma dwie metody - Init() i Dispose().

Wewnątrz OnEnter() tam są te wiersze:

// Step 2: Call OnAuthenticate virtual method to create 
// an IPrincipal for this request 
OnAuthenticate(new FormsAuthenticationEventArgs(context)); 

gdzie OnAuthenticate() jest zadeklarowane tak:

// OnAuthenticate: Forms Authentication modules can override 
//    this method to create a Forms IPrincipal object from 
//    a WindowsIdentity 
private void OnAuthenticate(FormsAuthenticationEventArgs e) { 

Teraz klasa jest sealed, więc jest to niemożliwe, aby dziedziczyć. Również OnAuthenticate() nie jest virtual, więc nie widzę, jak to mogło zostać przesłonięte w każdym razie.

Wygląda na to, że te komentarze są po prostu nieaktualne, a przesłanianie OnAuthenticate() nie jest już możliwe.

Czy coś złego? Czy ten kod prawdopodobnie umożliwia nadpisanie OnAuthenticate()?

+0

AFAIU Ta klasa jest zamknięta od samego [początku] (http://msdn.microsoft.com/en- us/library/system.web.security.formsauthenticationmodule (v = vs.71) .aspx) –

+1

Z nazwy i params wynika, że ​​jest to ['event trigger'] (http://stackoverflow.com/a/ 2448530/60761), powinny one zwykle być wirtualne. To oczywiście kłóci się z zapieczętowanymi. Najgorszy przypadek, w którym klasa mogłaby zasubskrybować własne wydarzenia. –

Odpowiedz

1

To nie działa. To po prostu niepoprawna dokumentacja. Nie pierwszy dla stwardnienia rozsianego. Na przykład powiadomiłem MS o tym w wersji 1.1 systemu .NET Framework i tutaj mamy 4.5, a dokumentacja wciąż jest całkowicie myląca: http://msdn.microsoft.com/en-us/library/7he0a7s1.aspx

Należy zwrócić uwagę na sekcję "Uwagi do spadkobierców". Jak ktoś ma wyprowadzić klasę z BindingManagerBase, gdy zawiera ona kilka właściwości i metod? A jednak istnieje kilka miejsc w dokumentacji dla BindingManagerBase i CurrencyManager, które mają "Uwagi dla spadkobierców" ...

Powiązane problemy