查找调用方法和类的安全方法

本文关键字:方法 安全 调用 查找 | 更新日期: 2023-09-27 18:35:42

可能的重复项:
如何在 C# 中获取调用方法

我有一个Log类,它应该将其客户端的类和方法附加到记录的消息中,如下所示:

[ClientClass.ClientMethod] This is the logged message.

我正在寻找一种安全的方法从 Log 类获取这些值,而无需将其作为来自客户端的参数传递。到目前为止,我已经尝试过:

var stackFrame = new StackFrame(StackFramesToSkip);
var method = stackFrame.GetMethod();
return string.Format("[{0}.{1}] {2}", method.DeclaringType.Name, method.Name, message);

但是,此方法并不总是生成调用方法。尤其是在使用多个线程时。

有没有安全的方法?我没主意了。

谢谢!

查找调用方法和类的安全方法

您可以使用

System.Reflection.MethodBase.GetCurrentMethod()获取当前方法的名称并将名称传输到参数,但您说您不需要这些。嗯,我知道其他几种方法。

  1. 对于 .NET 4.5 测试版,可以使用此调用方信息。
  2. 您可以使用动态代理。日志记录方法仍然需要一个参数,但动态代理只允许您进行一次调用,并将其动态添加到您的方法中。您可以使用 ContextBoundObject 或 Castle Dynamic Proxy
  3. 您可以使用 AOP 框架。这允许您执行类似于 (2) 的操作,但它更整洁。基本上,根据框架的不同,调用可以在构建时静态添加,而不是动态添加。这里有一个很好的AOP框架:PostSharp。

有一次我必须这样做,我手动添加了呼叫。起初我以为这会令人生畏,但就我而言,它并没有那么糟糕。我记录的方法种类非常有限(与 COM 通信的方法)。