如何用IMessageSink.SyncProcessMessage重写返回值

本文关键字:重写 返回值 SyncProcessMessage IMessageSink 何用 | 更新日期: 2023-09-27 18:29:38

我正试图使用IMessageSink在这里推出我自己的AOP,我已经为我的目的做好了一切,但我不太清楚如何让我的方法边界处理程序用它自己的缓存值代替原始方法调用。

    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的全部来源,如果有人能帮我的话。

如何用IMessageSink.SyncProcessMessage重写返回值

我得到了问题的答案。也更新了来源。

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