我需要在自定义记录器中记录类方法的调用。如果我有WebService类(.asmx),我可以将日志记录方法订阅到事件Application_BeginRequest
,并记录对此Web服务的Web方法的每次调用。但我只有属性为[ServiceInfo]
的简单类。当有人称之为方法时,Application_BeginRequest
不会触发。我可以在所有类方法中调用logging方法,但我认为这不正确。那么,当有人在这样的类中调用任何方法时,有没有办法捕获事件?感谢
答案 0 :(得分:2)
您应该使用AOP来做到这一点。一个简单的方法是从ContextBoundObject继承,检查this文章以获取详细信息。
答案 1 :(得分:1)
如果我正确理解了您的问题,那么您正在寻求实现一种机制,该机制在您的类中调用特定方法时进行记录。虽然您可以将调用添加到每个方法中,如您所提到的,这不是100%正确,并且通过实现AOP有更好的方法。
记录是AOP解决的cross cutting concern的典型示例。
我之前使用过Microsoft Unity for Interception(请参阅此link),这将允许您通过使用属性修饰它来修饰您希望拦截的类方法(即记录有关的信息)。
e.g。
[Log]
public MyMethodToLog(string x, int y)
{
//Class Implementation
}
这样做的好处是你没有在类实现中调用日志记录方法,只需删除属性就可以删除日志记录,或者将日志记录代码配置为仅在特定条件下执行日志记录(例如,配置值已设置)