También podemos usar lambda para encontrar a la persona que llama.
Supongamos que tiene un método definido por usted:
public void MethodA()
{
/*
* Method code here
*/
}
y quieres encontrar a quien llama.
1 . Cambie la firma del método para que tengamos un parámetro de tipo Acción (Func también funcionará):
public void MethodA(Action helperAction)
{
/*
* Method code here
*/
}
2 . Los nombres lambda no se generan al azar. La regla parece ser:> <CallerMethodName> __X donde CallerMethodName se reemplaza por la función anterior y X es un índice.
private MethodInfo GetCallingMethodInfo(string funcName)
{
return GetType().GetMethod(
funcName.Substring(1,
funcName.IndexOf(">", 1, StringComparison.Ordinal) - 1)
);
}
3 . Cuando llamamos al Método A, el parámetro llamador debe generar el parámetro Acción / Func. Ejemplo:
MethodA(() => {});
4 . Dentro del Método A ahora podemos llamar a la función auxiliar definida anteriormente y encontrar el Método de Información del método del llamador.
Ejemplo:
MethodInfo callingMethodInfo = GetCallingMethodInfo(serverCall.Method.Name);
StackTrace
,StackFrame
yCallerMemberName
) y publicado los resultados como una esencia para que otros puedan ver aquí: gist.github.com/wilson0x4d/7b30c3913e74adf4ad99b09163a57a1f