Castly动态代理—获取目标方法的返回值

本文关键字:方法 返回值 目标 获取 动态 代理 Castly | 更新日期: 2023-09-27 18:03:13

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

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

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

编辑—仅供参考,我通过使用Activator使其工作。创建实例,但我想知道是否有一个更干净的方法来实现等效:

object instance = Activator.CreateInstance(invocation.TargetType); 
invocation.MethodInvocationTarget.Invoke(instance, invocation.Arguments); 

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

Castly动态代理—获取目标方法的返回值

invocation.Proceed();
var returnValue = invocation.ReturnValue;