получить имя вызывающего метода - PullRequest
4 голосов
/ 14 сентября 2009

По сути, у меня есть веб-сервис, который я пытаюсь использовать для входа в систему. Для этого я создал класс с методом регистрации. Я устанавливаю класс в службе, а затем вызываю метод ведения журнала в каждом из веб-методов.

Я пытаюсь найти способ получить имя метода, вызвавшего метод loggong

Public sub tstmethod
log_object.log_method
end sub

в данном случае возвращаемое имя, которое я ищу, это "tstmethod"

Везде, где я видел, говорилось использовать

Dim stackframe As New Diagnostics.StackFrame
Return stackframe.GetMethod.Name.ToString

Или использовать

Dim stackframe As New Diagnostics.StackFrame
Return stackframe.GetMethod.DeclaringType.FullName

который я вызываю внутри метода регистрации

getmethod.name.tostring возвращает имя метода ведения журнала

getmethod.declaringtype.fullname возвращает имя класса ведения журнала

независимо от того, что я делаю, я не могу найти способ получить имя метода, который вызвал метод регистрации в этом случае "tstmethod"

Ответы [ 7 ]

12 голосов
/ 14 сентября 2009

Вам нужно создать экземпляр StackFrame с помощью соответствующего конструктора. Например,

Dim stackframe As New Diagnostics.StackFrame(1)

пропустит один кадр стека (сам метод ведения журнала) и получит кадр для вызывающего этого метода.

Тем не менее, если это вообще возможно, я настоятельно рекомендую использовать стандартный механизм регистрации, такой как log4net .

8 голосов
/ 23 июля 2012

Я думаю, что вышеприведенное утверждение можно сделать одной строкой:

MsgBox((New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name)

Появится окно сообщения с именем вызывающего метода.

4 голосов
/ 09 ноября 2012

VB.Net

System.Reflection.MethodBase.GetCurrentMethod.Name()
0 голосов
/ 26 августа 2015

Я добавляю форму вызова в качестве первого параметра для всех подпрограмм и функций например, callfunction (me, para1, para2 ......), чтобы я мог идентифицировать вызывающую форму и использовать ее имя или текст в вызываемой подпрограмме

0 голосов
/ 01 апреля 2010

Не пытайтесь использовать StackFrame. Он будет работать только в режиме отладки, который снижает скорость работы приложения.

Нет способа получить эту информацию в режиме выпуска, вам следует рассмотреть возможность изменения дизайна и добавления параметра.

0 голосов
/ 14 сентября 2009

Я использую этот код для получения метода вызова

string methodName = new StackFrame( 1, true ).GetMethod().Name;
methodName = " [" + methodName + "]";
return methodName;

не забудьте добавить пространство имен. Диагностика

0 голосов
/ 14 сентября 2009

Вы должны быть в состоянии получить это из StackFrame с помощью конструктора, сообщающего ему, сколько кадров идти вверх по цепочке, поэтому при получении родительского элемента будет использоваться 1 (кадр основан на нуле, поэтому 0 является текущим методом):

Dim stackTrace as New Diagnostics.StackFrame(1)
Return stackTrace.GetMethod.Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...