感谢您的关注!
背景
我有一个扩展方法,用于将给定的方法包装在 try/catch
中,并且我正在添加用于记录任何捕获的异常的代码:
public static T HandleServerError<T>(this Func<T> func)
{
T result = default(T);
try
{
result = func();
}
catch (Exception ex)
{
//******************************
//Code for logging will go here.
//******************************
ErrorHandlers.ThrowServerErrorException(ex);
}
return result;
}
以下是该方法的调用方式:var result = new Func<SomeClass.SomeType>(() => SomeClass.SomeMethod(id, name, color, quantity)).HandleServerError();
return result;
如您所见,我调用的任何方法都被注入(inject)到扩展方法中并在 try/catch 中执行。我们将使用 NLog 或 ELMAH 进行日志记录,但这在很大程度上与这个问题无关。
问题
如果出现问题,我需要尽可能多地记录有关委托(delegate)方法的信息,因为诸如“未将对象引用设置为对象的实例”之类的内容本身并没有帮助。
我想记录被调用方法的类和名称以及方法签名中的参数及其值。如果可能的话,我什至想记录哪一行失败,最后是实际的堆栈跟踪。
我猜我需要为此使用反射,并且可能会在注入(inject)的方法执行时以某种方式捕获绑定(bind)标志,但我不完全确定这是否是最好的方法,或者它是否可行。
问题
使用 C#,如何获取有关注入(inject)/委托(delegate)方法的元信息(即方法名称、来源类、参数、参数值)?
提前致谢。
最佳答案
您可以简单地访问其 Method
和 Target
属性,因为它基本上是任何其他委托(delegate)。
只需使用 func.Method
和 func.Target
。
关于c# - 如何检测和记录委托(delegate)方法签名中的参数名称和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13310550/