2015-11-30 3 views
2

Я хочу получить объект MethodInfo из вызывающего метода, чтобы определить, существует ли специальный атрибут, установленный для этого метода.Тип.GetMethod возвращает allways null

Класс Programm с помощью метода вызова Run()

class Program 
    { 
     private static RestHandler _handler = new RestHandler(); 
     static void Main(string[] args) 
     { 
      Run(); 
     } 

     [Rest("GET")] 
     static void Run() 
     { 
      _handler.Handler(typeof(Program)); 
     } 
    } 

Класс, где я хотел бы, чтобы определить пользовательский атрибут

public class RestHandler 
    { 
     public void Handler(Type t) 
     { 
      StackFrame frame = new StackFrame(1); 
      var method = frame.GetMethod(); 

      MethodInfo methodInfo = t.GetMethod(method.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); 

      var attributes = methodInfo.GetCustomAttributes<RestAttribute>(); 
     } 
    } 

Класс атрибута

public class RestAttribute : Attribute 
    { 
     public RestAttribute(string method) 
     { 
      Method = method; 
     } 

     public string Method { get; set; } 
    } 

Моя проблема в том, что объект MethodInfo (methodInfo) всегда ноль, даже объект метода из кадра стека установлен правильно. Свойство method.Name возвращает правильное имя вызывающего метода. Любая идея, почему объект methodInfo всегда имеет значение null?

ответ

4

Это частный метод:

static void Run() 

Добавить BindingFlags.NonPublic к нему доступ с помощью отражения

MethodInfo methodInfo = t.GetMethod(method.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); 
+0

Да, действительно. Спасибо. Теперь это работает. – Kris

+0

@ Kris Можете ли вы пометить как ответ, если это так? Благодарю. –

Смежные вопросы