2010-08-12 32 views
38

kullanarak özel niteliği olan yöntemleri bul özel özellikBen özel bir özellik var yansıma

Şimdiye kadar, bu var:

string assemblyName = fileInfo.FullName; 
byte[] assemblyBytes = File.ReadAllBytes(assemblyName); 
Assembly assembly = Assembly.Load(assemblyBytes); 

foreach (Type type in assembly.GetTypes()) 
{ 
    System.Attribute[] attributes = System.Attribute.GetCustomAttributes(type); 

    foreach (Attribute attribute in attributes) 
    { 
     if (attribute is MenuItemAttribute) 
     { 
      //Get me the method info 
      //MethodInfo[] methods = attribute.GetType().GetMethods(); 
     } 
    } 
} 

Şimdi ne gerek yöntem adı, dönüş türü, hem de onu kabul parametreleri elde etmektir.

cevap

68

Sizin kodunuz tamamen yanlıştır.
Herhangi bir tür bulamayacak olan, her türünde özniteliğine sahip olursunuz.

Her türdeki her yöntemde geçiş yapmalı ve özniteliğinin olup olmadığını kontrol etmelisiniz. Örneğin

:

var methods = assembly.GetTypes() 
         .SelectMany(t => t.GetMethods()) 
         .Where(m => m.GetCustomAttributes(typeof(MenuItemAttribute), false).Length > 0) 
         .ToArray(); 
+0

burada o eşek-yaklaşık-ön yapıyorum? Şu anda tüm özniteliklere bakıyorum ve daha sonra ilgili yöntemle –

+0

kodlarımda yeteri kadar bir sonuç alıyorum ve 2 tane sonuç aldım, ancak örneğinizle 0 aldım ..... –

+0

Derslerinizle denedim; benim için çalışıyor. Doğru mecliste mi arıyorsunuz? – SLaks

19
Dictionary<string, MethodInfo> methods = assembly 
    .GetTypes() 
    .SelectMany(x => x.GetMethods()) 
    .Where(y => y.GetCustomAttributes().OfType<MethodAttribute>().Any()) 
    .ToDictionary(z => z.Name);