2009-10-08 4 views
11

Ich habe einige Aspekte wie diese bekommen:Postsharp: Benutzerdefinierte Attribute entfernt werden, wenn mit 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 
    } 
} 

Jetzt ist meine Klasse ich habe, und ich schließe mich Attribut hinzu:

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

Funktioniert alles in Ordnung. Aber jetzt möchte ich Reflektion benutzen, um meinen Offset zu bekommen; wenn ich mache

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

Es gibt nichts zurück. Wie kann ich auf meinen ursprünglichen Offset-Wert zugreifen (die Eigenschaft für mein Attribut)?

Antwort

16

Ah, ich regelte es auf diese Weise:

Zuerst ein Attribut zu Ihrer Attributdefinition hinzufügen:

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

Und dann kann ich die get_ Methode meiner Eigenschaft nennen sich die Daten, die ich möchte zu bekommen :

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

Hmm kann meine eigene Antwort noch :-) –

+0

Vielen Dank für Frage nicht akzeptieren und beantworten :) –

+0

Dank Mann. Hatte ein ähnliches Problem ... es war verwirrend die Hölle aus mir heraus ... –

Verwandte Themen