Castle DynamicProxy 拦截器可以更改参数值吗?
Can a Castle DynamicProxy interceptor change argument values?
我们正在项目中使用 DynamicProxy。我已经为一些方法创建了一个拦截器。
我知道可以在 Castle.DynamicProxy.IInterceptor
对象中获取方法参数。
拦截器能否在调用 invocation.Proceed()
之前更改传递给方法的参数值?
是的 - 是的,它可以。
这种情况下,可以在IInvocation.Method
属性上使用Reflection来获取方法参数;方法参数直接附加到调用。虽然参数 属性 是一个只读值(没有 public setter),但它的类型是 object[]
- 所以它的属性是可写的。
因此,拦截器可以通过写入 arguments
对象来更改参数值,使用与方法参数位置对应的正确索引。
我们正在项目中使用 DynamicProxy。我已经为一些方法创建了一个拦截器。
我知道可以在 Castle.DynamicProxy.IInterceptor
对象中获取方法参数。
拦截器能否在调用 invocation.Proceed()
之前更改传递给方法的参数值?
是的 - 是的,它可以。
这种情况下,可以在IInvocation.Method
属性上使用Reflection来获取方法参数;方法参数直接附加到调用。虽然参数 属性 是一个只读值(没有 public setter),但它的类型是 object[]
- 所以它的属性是可写的。
因此,拦截器可以通过写入 arguments
对象来更改参数值,使用与方法参数位置对应的正确索引。