8

配線されているイベントのサブスクライブをプログラムで解除したいと考えています。

EndRequestイベントの購読を解除する方法を知りたいです。

インラインコードを使用していることを考えると、これを行う方法がわかりません。(それは正しい専門用語ですか?)

を使用しsome.Event -= MethodNameて購読を解除できることはわかっていますが、ここにはメソッド名がありません。

インライン コードを使用している理由は、イベントの外部で定義された変数を参照したいからです (これは必要でしたが、臭いがします... 渡す必要があるように感じます)。

助言がありますか?

コードタイム..

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)
{ ... }

ASP.NETこれは、アプリケーションでエラーを処理するためのサンプル コードです。

注: これを ASP.NET エラー処理に関する議論に変えないでください。私はイベントをいじって、これらのイベントをサンプルの研究開発/学習に使用しています。

4

1 に答える 1

11

その匿名デリゲートの登録を解除することはできません。変数に保存し、後で購読を解除する必要があります。

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

httpApplication.EndRequest += handler;
// do stuff
httpApplication.EndRequest -= handler;
于 2012-06-19T01:18:57.277 に答える