2014-09-17 16 views
7

Khi thiết lập các hiệu trưởng tùy chỉnh cho thuộc tính [Authorize] hoạt động trong phiên bản MVC 4 và 5 của Microsoft, chúng tôi cần truy cập Global.asax.cs và thiết lập phương thức có tên là Application_PostAuthenticateRequest(). Tôi đã làm điều đó trong dự án hiện tại của tôi, và nó hoạt động tốt.MVC 5: How_PostAuthenticateRequest() được gọi trong Global.asax như thế nào?

Tuy nhiên, nó thực sự gây lỗi cho tôi bao nhiêu điều này có vẻ như "ma thuật". Application_PostAuthenticateRequest() không phải là một phương pháp ảo. Tôi không quá tải hoặc triển khai bất kỳ chữ ký phương thức hiện có nào trong lớp. Vậy làm thế nào để khung MVC biết gọi nó? C# là một ngôn ngữ được đánh máy mạnh mẽ, sau khi tất cả, và bạn không nhận được để gọi một phương thức trên một lớp học, trừ khi bạn biết nó ở đó.

Cách duy nhất tôi có thể xem là thực hiện qua Phản chiếu. Có thể đi qua các phương thức của đối tượng cuối cùng và gán bất kỳ phương thức nào khớp với một chữ ký nhất định cho các đại biểu. Nhưng tôi thực sự không có ý tưởng. Và tôi không hiểu tại sao các nhà thiết kế lại làm điều đó thay vì chỉ thực hiện một phương pháp ảo.

Vì vậy, tóm lại, (A) cách Application_PostAuthenticateRequest được gọi khi nó không phải là phương pháp được xác định của lớp global.asax, và (B) tại sao chúng không chỉ làm cho nó thành một phương pháp ảo?

Trả lời

4

Có một bài viết toàn diện về điều đó bởi Rick Strahl. Tóm lại, thời gian chạy sử dụng sự phản chiếu trên lớp ứng dụng toàn cầu của bạn.

http://weblog.west-wind.com/posts/2009/Jun/18/How-do-ASPNET-Application-Events-Work

Đây là loại dây sự kiện thường được gọi là "tự động" và cũng có mặt ở cấp độ trang. Ví dụ: Page_Load được gọi chỉ vì dây tự động mặc định.

http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.autoeventwireup(v=vs.110).aspx

+2

Cảm ơn, đó là một bài viết hay. Tôi không thể nói rằng tôi hiểu tại sao họ đã làm nó theo cách này qua các phương pháp ảo, mặc dù. – Pharylon

+0

@Pharylon: Tôi cũng không thể nghĩ ra bất kỳ lý do hợp lý nào. Như vậy "tự động" dây tự động có vẻ là chống lại bất kỳ oo thông thường. –

+1

@Pharylon Dường như trường hợp sách văn bản dành cho Giao diện. Tôi nghĩ rằng đó chỉ là một trong những điều mà "hoạt động" và là ưu tiên thấp để nhận được bất kỳ sự chú ý nào cho việc tái cấu trúc trong tương lai. Cũng có thể có một số lo ngại về tính tương thích ngược, mặc dù tôi không chắc chắn về những gì sẽ xảy ra. Nó chắc chắn là một thiết kế tồi. Ma thuật và logic không trộn lẫn. – crush

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