我正在使用 Castle DynamicProxy 编写装饰代理.我需要代理的拦截器只拦截属性写入(而不是读取),因此我正在检查方法的名称:
public void Intercept(IInvocation invocation)
{
if (invocation.Method.Name.StartsWith("set_")
{
// ...
}
invocation.Proceed();
}
现在这工作正常,但我不喜欢我的代理对属性的实现方式有深入了解的事实:我想用类似于以下内容的方法替换方法名称检查:
if (invocation.Method.IsPropertySetAccessor)
不幸的是,我的 Google-fu 失败了。有什么想法吗?
最佳答案
您可以检查是否存在此方法作为 setter 的属性(未测试):
bool isSetAccessor = invocation.Method.DeclaringType.GetProperties()
.Any(prop => prop.GetSetMethod() == invocation.Method)
(灵感来自 Marc's answer to a related question 。)
关于c# - 识别 MethodInfo 实例是否是属性访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7819489/