3

ASP.NET Web Apps では、イベントは特定の順序で発生します。

簡単にするために、 ロード => 検証 => ポストバック => レンダリング

そのようなパイプライン スタイルのイベントを開発したいとします。

例 :

イベント 1 [「観客が集まっています」、皆さん { イベント 2 とイベント 3 信号が来るまでお待ちください }]

イベント 1 がタスクを完了した後

イベント 2 [ { イベント 2、イベント 3 "聴衆が集まった! 私の仕事は終わった } ]

イベント 2 は、そのタスクを実行するために制御を引き継ぎます

イベント 2 [「視聴者がログインしています」イベント 3 シグナルが出るまでお待ちください]

イベント 2 がタスクを完了した後

.....

イベント 3 [「Jon skeet によるプレゼンテーションが終了しました :)」]

非常に基本的な例で、誰でも説明できますが、これをどのように設計できますか?

4

3 に答える 3

1

Windows Workflow Foundationは、まさにこれを行うように設計されています。ここには2つのスクリーンキャストがあり、このようなものを実装する方法を見ることができます。

http://blog.wekeroad.com/mvc-storefront/mvcstore-part-19a/

http://blog.wekeroad.com/mvc-storefront/mvcstore-part-21/

于 2009-08-22T18:13:51.627 に答える
0

非常に単純なソリューションであり、ASP.NETで実際に発生するものにも近いものです。

class EventChain
{    
    public event EventHandler Phase1Completed;
    public event EventHandler Phase2Completed;
    public event EventHandler Phase3Completed;

    protected void OnPhase1Complete()
    {
        if (Phase1Completed != null)
        {
            Phase1Completed(this, EventArgs.Empty);
        }
    }

    public void Process()
    {
        // Do Phase 1
        ...
        OnPhase1Complete();

        // Do Phase 2
        ...
        OnPhase2Complete();    
    }
}
于 2009-08-22T18:20:20.273 に答える
0

この例は、単純な抽象クラスとハンドラーのリストの単純な拡張メソッドを取得し、話しているパイプライン モデルを実装する方法を示しています。これはもちろん単純化された例であり、イベント データとして文字列を渡すだけです。しかし、明らかに状況に合わせてカスタマイズできます。

拡張メソッドRaiseEventはハンドラーのリストを列挙し、ハンドラーのHandleメソッドを呼び出してイベントを通知します。

public abstract class Handler
{
  public abstract void Handle(string event);
}

public static class HandlerExtensions
{
  public static void RaiseEvent(this IEnumerable<Handler> handlers, string event)
  {
     foreach(var handler in handlers) { handler.Handle(event); }     
  }
}

...

List<Handler> handlers = new List<Handler>();
handlers.Add(new Handler1());
handlers.Add(new Handler2());

handlers.RaiseEvent("event 1");
handlers.RaiseEvent("event 2");
handlers.RaiseEvent("event 3");
于 2009-08-22T15:55:28.410 に答える