Castle DynamicProxy拦截器可以更改参数值吗?

时间:2016-03-28 00:47:50

标签: c# castle-windsor castle-dynamicproxy

我们在项目中使用DynamicProxy。我已经为一些方法创建了一个拦截器。

我知道可以在Castle.DynamicProxy.IInterceptor对象中获取方法参数。

在调用invocation.Proceed()之前,拦截器是否可以更改传递给方法的参数的值?

1 个答案:

答案 0 :(得分:3)

是的 - 是的,它可以。

在这种情况下,可以在IInvocation.Method属性上使用Reflection来获取方法参数;方法参数直接附加到调用。尽管arguments属性是一个只读值(没有公共setter),但它的类型为object[] - 所以它的属性是可写的。

因此,拦截器可以通过使用与方法参数位置对应的正确索引写入arguments对象来更改参数值。