У меня есть некоторый исторический код, и мы хотим получить некоторые данные о том, как используются некоторые методы. Я пытаюсь получить доступ к имени вызывающего метода, а также к имени выполняемого метода, используя отражение. Но мне кажется, что я могу получить только имя внешнего метода вызова.
У нас есть исходный метод, который делает что-то вроде этого:
public class DataBinder
{
public IEnumerable<object> FindData(string id)
{
var data = Helper.MeasureExecution(() => DataHelper.GetData(id), MethodBase.GetCurrentMethod());
return data;
}
}
И метод в stati c Helper
класс, который выполняет что-то вроде следующего:
public static T MeasureExecution<T>(Func<T> func, MethodBase sourceMethod)
{
T funcResult;
funcResult = func();
try
{
var executingMethod = string.Empty;
if (func.Method!= null)
{
executingMethod = func.Method.Name;
}
LogDetails($"Method Being Executed: {executingMethod}, Executing Source Class: {sourceMethod.ReflectedType.Name}, Executing Source Method: {sourceMethod.Name});
}
catch { }
return funcResult;
}
Я хотел бы получить следующее "Method Being Executed: GetData, Executing Source Class: DataBinder, Executing Source Method: FindData"
, но всегда получаю "Method Being Executed: FindData, Executing Source Class: DataBinder, Executing Source Method: FindData"
.
Это имеет какое-то отношение к тому, что лямбда-выражение является stati c, или мне здесь не хватает чего-то фундаментального?