2012-06-19 17 views
8

Programlanmış bir şekilde, bağlı olduğu bir etkinliğe üyelikten çıkmak istiyorum.Bu .NET olayına nasıl abone olabilirim?

EndRequest olayına nasıl abone olduğumu öğrenmek istiyorum.

Satır içi kod kullandığımı düşünerek bunu nasıl yapacağımı bilmiyorum. (Bu doğru teknik terim midir?)

some.Event -= MethodName aboneliğini iptal etmek için kullanabileceğimi biliyorum .. ama burada bir yöntem adı yok.

Satır içi kodu kullanmamın nedeni, olayın dışında tanımlı bir değişkene başvurmak istediğim içindir (bunun için gerekli olanı .. ama kokulu hissederim ... bunu iletmem gerektiğini hissediyorum).

Herhangi bir öneriniz var mı?

Kod zamanı ..

Bu beni ASP.NET uygulamada hatalarını işlemek için ben, yalnızca bazı örnek kod
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) 
{ ... } 

.

Not: Lütfen bunu ASP.NET hata işleme hakkında bir tartışmaya dönüştürmeyin. Sadece olaylarla uğraşıyorum ve bu olayları bazı örnek R & D/öğrenim için kullanıyorum.

cevap

11

Bu anonim delege aboneliğinden çıkmak mümkün değil. Bir değişkende saklayın ve daha sonra abonelikten gerekir:

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

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

teknik olarak yapabildin: 'httpApplication.EndRequest = null' ama bu ** herşeyi abonelikten olur **. – CodingGorilla

+0

+1 bunu yapmanın yolu. – Joe

+0

Awesome :) Çalışıyor! Eh .. kod mükemmel ama kullanımım yanlış. LifeCycle başlatma işleminden bir olaydan çıkmayı deniyorum. Bu şekilde, ASP.NET çerçevesi "bu olayları başlangıç ​​adımından sonra değiştiremez" diyerek kötü bir hata atar. Doh! –