从Castle Windsor拦截器访问方法的自定义属性

时间:2010-03-29 08:42:55

标签: castle-windsor interceptor castle-dynamicproxy

我正在尝试访问应用于城堡拦截器中的方法的自定义属性,例如:

[MyCustomAttribute(SomeParam = "attributeValue")]
public virtual MyEntity Entity { get; set; }

使用以下代码:

internal class MyInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        if (invocation.Method.GetCustomAttributes(typeof(MyCustomAttribute), true) != null)
        {
            //Do something
        }
    }
}

在调用方法时,拦截器正在触发,但此代码不返回自定义属性。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:4)

为此尝试Attribute.GetCustomAttribute(...)静态方法。这很奇怪但是这两种方法有时会因某种奇怪的原因而返回不同的结果。

答案 1 :(得分:3)

尝试

private static Attribute getMyCustomAttribute(IInvocation invocation)
{
   var methodInfo = invocation.MethodInvocationTarget;
   if (methodInfo == null)
   {
      methodInfo = invocation.Method;
   }
   return Attribute.GetCustomAttribute(methodInfo, typeof(MyCustomAttribute), true);
}

答案 2 :(得分:1)

我想我已经弄明白了 - 这是因为属性和方法之间存在差异。它是触发拦截器的get_方法,并且不使用父属性的属性进行修饰。