2013-03-04 40 views
5

Tôi đang đọc nguồn .NET4 (chúng có thể được tải xuống để nghiên cứu một cách tự do) và tôi đã tìm thấy điều gì đó lạ trong việc triển khai System.Web.Security.FormsAuthenticationModule.Mã này trong FormsAuthenticationModule phải hoạt động như thế nào?

Lớp được khai báo như thế này:

public sealed class FormsAuthenticationModule : IHttpModule 

nơi IHttpModule có hai phương pháp - Init()Dispose().

Bên OnEnter() đang có những dòng này:

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

nơi OnAuthenticate() được khai báo như thế này:

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

Bây giờ lớp là sealed, vì vậy nó không thể kế thừa từ. Ngoài ra OnAuthenticate() không phải là virtual vì vậy tôi không thấy nó có thể bị ghi đè như thế nào.

Vì vậy, có vẻ như những nhận xét này chỉ lỗi thời và ghi đè OnAuthenticate() không còn khả thi nữa.

Tôi có gặp trục trặc gì không? Mã này có thể cho phép ghi đè OnAuthenticate() không?

+0

AFAIU Lớp học này được niêm phong ngay từ đầu [http://msdn.microsoft.com/en- us/library/system.web.security.formsauthenticationmodule (v = vs.71) .aspx) –

+1

Từ tên và params nó sau đây là một ['trigger event'] (http://stackoverflow.com/a/ 2448530/60761), chúng thường là ảo. Đó là tất nhiên xung đột với niêm phong. Trường hợp xấu nhất một lớp học có thể đăng ký các sự kiện riêng của mình. –

Trả lời

1

Nó không hoạt động. Nó chỉ đơn giản là tài liệu không chính xác. Không phải là đầu tiên cho MS. Ví dụ, tôi đã thông báo cho MS về việc này trong phiên bản 1.1 của .NET Framework và ở đây chúng tôi đang ở 4.5 và tài liệu đó vẫn hoàn toàn gây hiểu lầm: http://msdn.microsoft.com/en-us/library/7he0a7s1.aspx

Lưu ý phần "Ghi chú cho người thừa kế". Làm thế nào là một người nào đó có nghĩa vụ để lấy được một lớp học từ BindingManagerBase khi nó có chứa một số tài sản và phương pháp internal abstract? Tuy nhiên, có một số nơi trong tài liệu dành cho BindingManagerBase và CurrencyManager có "Ghi chú cho người thừa kế" ...

Các vấn đề liên quan