Получить текущую базу данных MethodBase в ASP.NET vNext

Я портирую библиотеку с открытым исходным кодом из обычного профиля клиента .NET 4 в DNX Core 5.0. В библиотеке довольно много изменений: свойства или методы перемещаются или полностью удаляются. Я просмотрел этот ответ, но в моем случай, потому что метод был удален.

Одна из проблем - у меня есть фрагмент кода, в котором вызывается MethodBase.GetCurrentMethod(). Этот метод больше не существует в API. Остались только похожие методы:

public static MethodBase GetMethodFromHandle(RuntimeMethodHandle handle);
public static MethodBase GetMethodFromHandle(RuntimeMethodHandle handle, RuntimeTypeHandle declaringType);

Но я не уверен, что это за «ручка». Мне нужно получить MethodBase, чтобы получить доступ к его параметрам, чтобы затем обработать их для запроса REST API. Это код, который создает объект в .NET 4:

public static Annotation Annotation(string query = null, string text = null, string type = null, string name = null, string entity = null, int limit = 25, int offset = 0)
    {
      var search = Help.SearchToString(MethodBase.GetCurrentMethod(), query, text, type, name, entity);
      return Help.Find<Annotation>(search, limit, offset, "annotation");
    }

И затем он используется здесь:

public static string SearchToString(MethodBase m, params object[] search)
    {
      var paras = m.GetParameters();
      var result = string.Empty;

      for (var i = 0; i < search.Length; i++)
      {
        if (search[i] != null)
        {
          if (i == 0)
          {
            result += search[i] + "%20AND%20";
          }
          else
          {
            result += paras[i].Name.ToLower() + ":" + search[i] + "%20AND%20";
          }         
        }      
      }

      return result.LastIndexOf("%20AND%20", StringComparison.Ordinal) > 0
        ? result.Substring(0, result.LastIndexOf("%20AND%20", StringComparison.Ordinal))
        : result;
    }

Каким другим способом я мог бы получить доступ к параметрам объекта MethodBase в методе SearchToString(), если я не могу легко передать указанный MethodBase в качестве параметра?


person Astaar    schedule 15.09.2015    source источник
comment
Привет, @Astaar, ты нашел решение? У меня такая же проблема с основным приложением .net, больше не могу: MethodBase.GetCurrentMethod ();   -  person Thomas    schedule 10.05.2016


Ответы (1)


Предполагая, что метод Annotation находится в классе TestClass, используйте

typeof(TestClass).GetMethod(nameof(Annotation))
person Sidoine    schedule 15.09.2015
comment
это не работает точно так же и вызывает исключение, когда несколько методов имеют одно и то же имя. - person Jack; 01.03.2017