强制动态代理 - 获取目标方法的返回值

时间:2011-07-24 23:07:23

标签: c# reflection castle-windsor castle-dynamicproxy

当代理对象并使用城堡动态代理拦截方法时,是否可以获得目标方法的返回值?我尝试过使用以下方法,

object result = invocation.GetConcreteMethod().Invoke(instance, null); 

object result = invocation.GetConcreteMethodInvocationTarget().Invoke(instance, null); 

这会导致无限循环。我希望能够在调用Invocation.Proceed()之前获取原始目标方法的返回值。

编辑 - Fyi我通过使用Activator.CreateInstance让它工作,但我想知道是否有更简洁的方法来实现等效:

object instance = Activator.CreateInstance(invocation.TargetType); 

invocation.MethodInvocationTarget.Invoke(instance, invocation.Arguments); 

问题是这只是原始对象的一个​​新的非代理实例,而我想要原始的非代理实例本身。

1 个答案:

答案 0 :(得分:5)

invocation.Proceed();

var returnValue = invocation.ReturnValue;