2009-10-08 4 views
11

Ho qualche aspetto simile a questo:PostSharp: Gli attributi personalizzati vengono rimossi quando si utilizza OnMethodInvocationAspect

public class MyAttribute : OnMethodInvocationAspect 
{ 
    public int Offset { get; internal set; } 

    public MyAttribute(int offset) 
    { 
     this.Offset = offset; 
    } 

    public override void OnInvocation(MethodInvocationEventArgs eventArgs) 
    { 
     //do some stuff 
    } 
} 

Ora sto avendo la mia classe, e io aggiungere il mio attributo ad esso:

class MyClass 
{ 
    [MyAttribute(0x10)] 
    public int MyProp { get; set; } 
} 

Funziona tutto bene. Eppure ora voglio usare il reflection per ottenere il mio offset; quando faccio

typeof(MyClass).GetProperty("MyProp").GetCustomAttributes(true); 

Non restituisce nulla. Come posso accedere al mio valore Offset originale (la proprietà sul mio attributo)?

risposta

16

Ah, ho risolto in questo modo:

Prima aggiungere un attributo alla definizione di attributo come:

[MulticastAttributeUsage(MulticastTargets.Method, PersistMetaData=true)] 
public class MyAttribute : OnMethodInvocationAspect 

e poi posso chiamare il metodo get_ di mia proprietà per ottenere i dati che voglio :

 foreach (PropertyInfo pi in typeof(T).GetProperties()) 
     { 
      var entityAttribute = (MyAttribute)(typeof(T).GetMethod("get_" + pi.Name).GetCustomAttributes(typeof(MyAttribute), true).FirstOrDefault()); 
     } 
+1

Hmm non può accettare la mia risposta ancora :-) –

+0

Grazie per la domanda e risposta :) –

+0

Grazie uomo. Ho avuto un problema simile ... mi stava confondendo da matti ... –