弊社メンバーから前のコードだとチェインを辿れないっしょってツッコミが来たので、それ用のコードに変更するとこんな感じ。
public class SampleCallHandler : ICallHandler { private int order = 0; public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) { Console.WriteLine("前処理実行!"); IMethodReturn returnObject = getNext()(input, getNext); Console.WriteLine("後処理実行!"); return returnObject; } public int Order { get { return order; } set { order = value; } } }
これで例えばSampleCallHandler2Attributeという属性クラスを作成し、フックしたいメソッドに多段に属性を設定してやれば呼び出しチェインを辿っていけるようになる。
[SampleCallHandler] [SampleCallHandler2] public void Output() { Console.WriteLine("サンプル出力2"); }
もちろんSampleCallHandler2とかって新しいハンドラを作成して、SampleCallHandler2Attributeではそっちの方をインスタンス化する必要があります。
Posted by GAMMARAY at 2008年08月06日 18:21 | TrackBack