Utilizzo di reflection per ottenere il nome e i parametri del metodo
-
19-08-2019 - |
Domanda
Sto cercando di allenare un modo per creare programmaticamente una chiave per Memcached , basato su il nome del metodo e i parametri. Quindi, se ho un metodo,
string GetName(int param1, int param2);
ritornerebbe:
string key = "GetName(1,2)";
So che puoi ottenere MethodBase usando reflection, ma come posso ottenere i valori dei parametri nella stringa, non i tipi di parametro?
Soluzione
Quello che stai cercando è un intercettore. Come dice il nome, un intercettore intercetta una chiamata di metodo e consente di eseguire operazioni prima e dopo la chiamata di un metodo. Questo è abbastanza popolare in molti framework di cache e logging.
Altri suggerimenti
Non è possibile ottenere i valori dei parametri del metodo da reflection. Dovresti usare l'API di debug / profiling. È possibile ottenere i nomi e i tipi di parametro, ma non i parametri stessi. Siamo spiacenti ...
Questo è quello che ho escogitato (tuttavia, potrebbe non essere particolarmente efficiente):
MethodBase method = MethodBase.GetCurrentMethod();
string key = method.Name + "(";
for (int i = 0; i < method.GetParameters().Length; i++) {
key += method.GetParameters().GetValue(i);
if (i < method.GetParameters().Length - 1)
key += ",";
}
key += ")";