此示例顯示如何在處理程序列表中採用簡單的抽象類和簡單擴展方法,並實現您正在討論的管道模型。這當然是一個簡單的例子,因爲我只是將它作爲事件數據傳遞給一個字符串。但你顯然可以定製以適應你的情況。
擴展方法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");