Werte der Parameter einer Methode per Reflection ermitteln

04/02/2010 - 11:34 von Jan Thordsen | Report spam
Hallo

ich habe eine Loggerklasse gebaut, der ich als Parameter ein MethodBase
Object übergebe (erzeugt mit MethodBase.GetCurrentMethod()).

Mein Logger soll jetzt in eine logdatei neben einigen anderen Daten der
Methode auch deren Parameter und die aktuellen Werte der Parameter
wegschreiben. An die Parameter komme ich ja über die Parameters[] Auflistung
(durch welche ich u.a. den Typ und den Namen ermitteln kann), aber ich sehe
irgendwie keine Möglichkeit, an die aktuellen Werte der Parameter zu kommen.

Gibt es dafür eine Möglichkeit?

mfg

Jan Thordsen
 

Lesen sie die antworten

#1 Frank Dzaebel
04/02/2010 - 20:05 | Warnen spam
Hallo Jan,

ich habe eine Loggerklasse gebaut, der ich als Parameter ein MethodBase
Object übergebe (erzeugt mit MethodBase.GetCurrentMethod()).
Mein Logger soll jetzt in eine logdatei neben einigen anderen Daten der
Methode auch deren Parameter und die aktuellen Werte der Parameter
wegschreiben. An die Parameter komme ich ja über die Parameters[]
Auflistung
(durch welche ich u.a. den Typ und den Namen ermitteln kann), aber ich
sehe
irgendwie keine Möglichkeit, an die aktuellen Werte der Parameter zu
kommen.



Die MethodBase, die Du durch GetCurrentMethod() bekommst,
ist nicht dafür direkt benutzbar, Werte von Parametern
eines bestimmten StackFrames zu bekommen. Dafür müsstest Du
über den einen CallStack (StackTrace) gehen, aber managed gibt es
da momentan noch nicht direkt Lösungen dafür.

Historisch machen das ja Debugger. Du kannst durchaus
(u.a.) auf Debugger-APIs zurückgreifen.

[Debugging (Unmanaged API Reference)]
http://msdn.microsoft.com/en-us/lib...04520.aspx

[Hauptbegriffe in der Debug-API]
http://msdn.microsoft.com/de-de/lib...84605.aspx

Etwas neuzeitlicher sind Interception-Frameworks:

[Thomas Danecker's Blog: Interception with Proxies]
http://tdanecker.blogspot.com/2007/...oxies.html

Sehr "en vogue" aber auch AOP-Methoden über PostSharp,
bei denen u.a. einfach Code vor die Methoden-Startpunkte
injiziert wird:

[Centralized exception handling and logging using PostSharp]
http://www.coderecycling.net/2009/0...sharp.html

Und schließlich ab VS 2010 sollte auch IntelliTrace nutzbar sein:

[Australian Visual Studio Product & Licensing Blog : VS2010 New
Capabilities and Product Summary]
http://blogs.msdn.com/arabindc/arch...mmary.aspx

[Debugging With IntelliTrace]
http://msdn.microsoft.com/en-us/library/dd264915(VS.100).aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen