Domanda

Sto cercando di accedere a un attributo personalizzato applicato a un metodo all'interno di un intercettore del castello, ad esempio:

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

Utilizzando il seguente codice:

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

L'Interceptor sta sparando OK quando viene chiamato il metodo ma questo codice non restituisce l'attributo personalizzato. Come posso raggiungere questo obiettivo?

È stato utile?

Soluzione 3

Penso di averlo capito - è a causa della differenza tra la proprietà e il metodo. È il metodo GET_ che innesca l'interceptor, e questo non è decorato con l'attributo della proprietà principale.

Altri suggerimenti

Provare Attribute.GetCustomAttribute(...) Metodo statico per questo. È bizzarro ma questi due metodi restituiscono diversi risultati a volte per qualche strana ragione.

Provare

private static Attribute getMyCustomAttribute(IInvocation invocation)
{
   var methodInfo = invocation.MethodInvocationTarget;
   if (methodInfo == null)
   {
      methodInfo = invocation.Method;
   }
   return Attribute.GetCustomAttribute(methodInfo, typeof(MyCustomAttribute), true);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top