有没有办法拦截方法执行并取消呢?
我只是找到了一种方法,可以使用Invoke
和Microsoft.Practices.Unity
从ICallHandler
方法中抛出异常,但在Invoke
方法实现中,我只能返回{ {1}}。
Bassically这是代码:
getNext()(input, getNext);
答案 0 :(得分:6)
这取决于你取消的意思。客户端代码已调用该方法,它期望结果或异常。
你可以做的是避免在你的处理程序中调用原始方法,有效地停止管道,但你需要做一些事情来完成方法调用。
要绕过包含原始方法的其余管道,您需要使用IMethodInvocation接口中的CreateMethodReturn方法创建一个新方法返回,以便成功返回,或者使用CreateExceptionMethodReturn方法抛出异常。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ee650526(v=pandp.20)。
例如,而不是做
return getNext()(input, getNext);
你可以做到
return input.CreateMethodReturn(null, input.Arguments)
返回null。
对于通用处理程序,您需要分析截获的方法签名以确定需要返回的内容。
答案 1 :(得分:3)
我还建议看一下AOP方法。例如PostSharp。 它们针对不同的用例有很多方面。 详细信息: http://www.sharpcrafters.com 您可以查看MethodInterceptionAspect