如何拦截和取消方法执行

时间:2012-09-14 20:41:51

标签: c# unity-container interceptor aop

有没有办法拦截方法执行并取消呢? 我只是找到了一种方法,可以使用InvokeMicrosoft.Practices.UnityICallHandler方法中抛出异常,但在Invoke方法实现中,我只能返回{ {1}}。

Bassically这是代码:

getNext()(input, getNext);

2 个答案:

答案 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