是否有人建议使用Castle DynamicProxy更好地拦截属性?
具体来说,我需要我正在拦截的PropertyInfo,但它不是直接在IInvocation上,所以我所做的是:
public static PropertyInfo GetProperty(this MethodInfo method)
{
bool takesArg = method.GetParameters().Length == 1;
bool hasReturn = method.ReturnType != typeof(void);
if (takesArg == hasReturn) return null;
if (takesArg)
{
return method.DeclaringType.GetProperties()
.Where(prop => prop.GetSetMethod() == method).FirstOrDefault();
}
else
{
return method.DeclaringType.GetProperties()
.Where(prop => prop.GetGetMethod() == method).FirstOrDefault();
}
}
然后在我的IInterceptor中:
public void Intercept(IInvocation invocation)
{
bool doSomething = invocation.Method
.GetProperty()
.GetCustomAttributes(true)
.OfType<SomeAttribute>()
.Count() > 0;
}
答案 0 :(得分:3)
通常这不可用。 DynamicProxy拦截方法(包括getter和setter),它不关心属性。
您可以通过制作拦截器IOnBehalfAware
(请参阅here)并预先发现method-&gt;属性映射来优化此代码。