2012-06-19 41 views
8

Tôi muốn hủy đăng ký theo chương trình cho một sự kiện, như đã được kết nối.Làm cách nào để hủy đăng ký sự kiện .NET này?

Tôi muốn biết cách tôi có thể hủy đăng ký sự kiện EndRequest.

Tôi không chắc chắn cách thực hiện việc này, xem xét tôi đang sử dụng mã nội tuyến. (có phải là cụm từ kỹ thuật chính xác không?)

Tôi biết tôi có thể sử dụng số some.Event -= MethodName để hủy đăng ký .. nhưng tôi không có tên phương thức, tại đây.

Lý do tôi sử dụng mã nội tuyến là vì tôi muốn tham chiếu biến được xác định bên ngoài sự kiện (mà tôi yêu cầu .. nhưng cảm thấy có mùi ... tôi cảm thấy mình cần truyền vào).

Mọi đề xuất?

thời gian Mã ..

public void Init(HttpApplication httpApplication) 
{ 
    httpApplication.EndRequest += (sender, e) => 
    { 
     if (some logic) 
      HandleCustomErrors(httpApplication, sender, e, 
           (HttpStatusCode)httpApplication.Response.StatusCode); 
    }; 

    httpApplication.Error += (sender, e) => 
      HandleCustomErrors(httpApplication, sender, e); 
} 

private static void HandleCustomErrors(HttpApplication httpApplication, 
             object sender, EventArgs e, 
             HttpStatusCode httpStatusCode = 
              HttpStatusCode.InternalServerError) 
{ ... } 

Đây chỉ là một số mẫu mã tôi có, cho tôi để xử lý các lỗi trong một ứng dụng ASP.NET.

LƯU Ý: Vui lòng không biến điều này thành cuộc thảo luận về xử lý lỗi ASP.NET. Tôi chỉ đang chơi đùa với các sự kiện và sử dụng những sự kiện này cho một số mẫu R & D/learning.

Trả lời

11

Không thể hủy đăng ký đại biểu ẩn danh đó. Bạn sẽ cần phải lưu trữ nó trong một biến và hủy đăng ký nó sau này:

EndRequestEventHandler handler = (sender, e) => 
{ 
    if (some logic) 
     HandleCustomErrors(httpApplication, sender, e, 
          (HttpStatusCode)httpApplication.Response.StatusCode); 
}; 

httpApplication.EndRequest += handler; 
// do stuff 
httpApplication.EndRequest -= handler; 
+0

Về mặt kỹ thuật bạn có thể: 'httpApplication.EndRequest = null' nhưng điều đó sẽ hủy đăng ký ** mọi thứ **. – CodingGorilla

+0

+1 đây là cách để làm điều đó. – Joe

+0

Tuyệt vời :) Hoạt động! Vâng .. mã là hoàn hảo nhưng việc sử dụng của tôi là sai. Tôi đang cố gắng hủy đăng ký khỏi sự kiện - sau khi khởi tạo LifeCycle. Như vậy, khuôn khổ ASP.NET ném một lỗi khó chịu nói "u không thể sửa đổi những sự kiện SAU bước init". Doh! –

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