2009-10-08 17 views
11

kullanırken Özel özellikler böyle bazı yönlerini var kaldırılır:PostSharp: OnMethodInvocationAspect

Şimdi
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 
    } 
} 

benim sınıf yaşıyorum ve bu benim niteliğini ekleyin:

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

Her şey yolunda. Yine de artık benim ofsetimi almak için yansımayı kullanmak istiyorum; Ne zaman ben hiçbir şey döndürmez. Orijinal Ofset değerine (özniteliğimin özelliği) nasıl erişebilirim?

İlk gibi nitelik tanımına bir öznitelik ekleyin::

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

Sonra istediğim verileri almak için benim mülkiyet get_ yöntemini çağırabilirsiniz

cevap

16

Ah, bu şekilde sabit :

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

Hmm henüz soru için :-) –

+0

Teşekkür kendi cevabı kabul cevap :) –

+0

Teşekkür adamı olamaz. Benzer bir sorun vardı ... benim cehennem kafa karıştırıcı oldu ... –