Giả sử bình thường thêm nó vào cấu hình web và thư mục bin sau khi thực tế không làm việc cho bạn có một vài khả năng cho bạn trong khuôn khổ hiện tại:
Nếu bạn không nhớ thay đổi configs web, nhưng cần phải lưu trữ các mô-đun bên ngoài thùng bạn có thể sử dụng System.Web.PreApplicationStartMethod đăng ký một handler cho AppDomain Sự kiện .AssemblyResolve sau đó có bộ xử lý sự kiện và trả lại loại
Nếu bạn không muốn sửa đổi web.config hoặc cần sự kiện của bạn ở trên cùng của ngăn xếp như bạn sẽ nhận được bằng cách GACing nó và thay đổi cấu hình web cấp máy bạn có thể sử dụng System.Web.PreApplicationStartMethod để có được mã để chạy khi khởi động chỉ bằng cách trong thư mục bin sau đó sử dụng Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule từ thư viện MVC Razor. Việc này sẽ cho bạn kết quả tương tự như là mô-đun cuối cùng trong danh sách mô-đun máy.
Nếu bạn không muốn sửa đổi cấu hình web và cần phải sớm hơn trong ngăn sự kiện thì bạn cần phải làm điều gì đó để sắp xếp lại trình xử lý sự kiện. Tôi cần phải làm điều này một lần để thử và gỡ lỗi một cái gì đó đã nuốt lỗi. Một poking ít về trong phản xạ và tôi đã đưa ra chức năng này để có được những xử lý sự kiện hiện
Dim t As Type = target.[GetType]()
Public Function GetEventSubscribers(ByVal target As Object, ByVal eventName As String) As [Delegate]()
Dim w = CType(t.GetField("_events", BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.NonPublic).GetValue(target), System.ComponentModel.EventHandlerList)
Dim k = t.GetFields(BindingFlags.[Static] Or BindingFlags.Instance Or BindingFlags.NonPublic).Where(Function(x) x.Name.StartsWith("Event" & eventName)).Select(Function(x) x.GetValue(target)).ToList()
Dim d() As [Delegate] = k.SelectMany(Function(x)
If w(x) Is Nothing Then
New [Delegate]() {}
Else
Return w(x).GetInvocationList()
End If
End Function).ToArray
Return d
End Function
Nếu bạn vượt qua dụ HttpApplication đến nó với một EventName bạn nhận được tất cả các đại biểu handler đăng ký, mà sẽ cho phép bạn gọi RemoveEventHandler() trên mỗi người trong số họ.
Nếu bạn làm điều đó với sự kiện lỗi, sau đó thêm trình xử lý của riêng bạn, sau đó thêm lại các đại biểu có sẵn theo thứ tự đúng thì trình xử lý của bạn kích hoạt trước, trước khi bất kỳ trình xử lý nào khác có cơ hội ngay cả trạng thái và phần còn lại của ứng dụng dường như không có gì khôn ngoan hơn nếu bạn không tự thay đổi trạng thái của sự kiện.
Đây là mẹo cực kỳ hữu ích. Cảm ơn – NickSuperb