当代理对象并使用城堡动态代理拦截方法时,是否可以获得目标方法的返回值?我尝试过使用以下方法,
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);
问题是这只是原始对象的一个新的非代理实例,而我想要原始的非代理实例本身。
答案 0 :(得分:5)
invocation.Proceed();
var returnValue = invocation.ReturnValue;