2012-03-29 121 views
1

我想在这里使用IMessageSink滚动我自己的AOP,并且我有一切为我的目的工作,但我无法完全弄清楚如何让我的方法边界处理程序替换它自己的原始方法调用的缓存值。如何用IMessageSink.SyncProcessMessage覆盖返回值

IMessage IMessageSink.SyncProcessMessage(IMessage msg) 
    {  
     IMessage returnMethod = null; 
     object overrideReturnValue = null; 
     if(OnEvent(msg, returnMethod, out overrideReturnValue)) 
     { 
      // how do i override the return message 
      // and return here? 
     } 
     returnMethod = next.SyncProcessMessage(msg); 
     OnEvent(msg, returnMethod, out overrideReturnValue); 
     return returnMethod; 
    } 

这里是AOP.cs完整的源代码,如果可能帮助别人能给我一只手在这里。

回答

1

我得到了我的问题的答案。还更新了source

  IMethodCallMessage methodMessage = (IMethodCallMessage)msg; 
      returnMethod = new ReturnMessage(overrideReturnValue, methodMessage.Args, methodMessage.ArgCount, methodMessage.LogicalCallContext, methodMessage); 
      return returnMethod;