0

我需要在我的自定义记录器中记录对类方法的调用。如果我有 WebService 类 (.asmx),我可以将日志记录方法订阅到事件Application_BeginRequest并记录对此 Web 服务的 Web 方法的每次调用。但是我只有带有属性的简单类[ServiceInfo]。当有人调用它的方法时 -Application_BeginRequest不会触发。我可以在所有类方法中调用日志记录方法,但我认为这是不正确的。那么,当有人调用此类中的任何方法时,是否有任何方法可以捕获事件?谢谢

4

2 回答 2

2

你应该使用 AOP 来做到这一点。一个简单的方法是从 ContextBoundObject 继承,查看这篇文章以获取详细信息。

于 2013-09-12T11:54:48.900 回答
1

如果我正确理解了您的问题,您正在寻求实现一种机制,该机制记录您的类中何时调用特定方法。尽管您可以将这个调用添加到您提到的每个方法中,但这并不是 100% 正确的,通过实现 AOP 有更好的方法来做到这一点。

日志记录是AOP 解决的横切关注点的经典示例。

我以前使用过 Microsoft Unity 进行拦截(请参阅此链接),这将允许您装饰您希望拦截的类方法(即有关的日志信息),也许通过使用属性装饰它。

例如

[Log]
public MyMethodToLog(string x, int y)
{
   //Class Implementation
}   

这样做的好处是您在类实现中没有调用日志记录方法,您可以通过简单地删除属性来删除日志记录,或者将日志记录代码配置为仅在某些条件下执行日志记录(例如,当配置值为放)

于 2013-09-12T12:01:40.233 回答