IMessageSink の実装(メソッドのロギング)
MethodLogger クラスの実装によるものとほとんど同じですが、メッセージシンクは実装を提供しなくてよいので、非常に簡潔になります。
public class MethodLoggerSink : IMessageSink { private readonly IMessageSink next; public MethodLoggerSink(IMessageSink next) { this.next = next; } public IMessageSink NextSink { get { return this.next; } } public IMessage SyncProcessMessage(IMessage msg) { LogCallMsg(msg as IMethodCallMessage); // 次へ転送する return this.NextSink.SyncProcessMessage(msg); } public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink) { LogCallMsg(msg as IMethodCallMessage); return this.NextSink.AsyncProcessMessage(msg, replySink); } // メソッド呼び出しを記録する private void LogCallMsg(IMethodCallMessage req) { if (req != null) { Debug.WriteLine(req.MethodName + "が呼び出されました。"); } } }
とりあえず、IDynamicMessageSink は考えないことにしています。