2012-03-29 100 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;