Доступ к пользовательскому атрибуту метода из перехватчика Castle Windsor - PullRequest
4 голосов
/ 29 марта 2010

Я пытаюсь получить доступ к пользовательскому атрибуту, применяемому к методу внутри перехватчика замка, например ::

[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 ]

4 голосов
/ 29 марта 2010

Попробуйте Attribute.GetCustomAttribute(...) статический метод для этого. Это странно, но эти два метода иногда по разным причинам возвращают разные результаты.

3 голосов
/ 09 апреля 2013

Попробуйте

private static Attribute getMyCustomAttribute(IInvocation invocation)
{
   var methodInfo = invocation.MethodInvocationTarget;
   if (methodInfo == null)
   {
      methodInfo = invocation.Method;
   }
   return Attribute.GetCustomAttribute(methodInfo, typeof(MyCustomAttribute), true);
}
1 голос
/ 29 марта 2010

Мне кажется, я понял это из-за разницы между свойством и методом. Это метод get_, который запускает перехватчик, и он не украшен атрибутом родительского свойства.

...