捕获用于记录目的的事件

时间:2008-12-22 07:19:06

标签: .net aop

当一个应用程序启动时,我需要知道它们被触发时的某些方法。如何使用属性和AOP技术做到这一点?

最简单的方法是在事件方法中记录时间,例如:

private void Page_load()
{
  DateTime dt = DateTime.Now;
}

并将Datetime保存到数据库中。但这绝对不可取,因为这样做会使该方法产生很多交叉功能,使维护工作更加困难。我正在考虑使用属性来解决这个问题。 PostSharp似乎是一个很好的候选者,因为它可以拦截方法调用,并做任何你想要的前后处理。但有一点显然缺乏的是,如果没有编写大量自定义代码,它就无法处理事件。

是否有任何框架可以自然处理事件?

3 个答案:

答案 0 :(得分:2)

Postsharp可能会帮助你

答案 1 :(得分:1)

对于您想要记录的每个事件,您都不需要单独的方法。

编写一个方法来执行日志记录:

public static void LogEventRaised(string event)
{
    ...
}

然后使用匿名方法订阅事件:

Load += delegate { LogEventRaised("Load") };

是的,这是必要的而不是声明性的,并重复事件名称 - 但它仍然非常紧凑。您可以使用反射将处理程序附加到所有事件,但这可能是过度的。

答案 2 :(得分:1)

Spring框架具有面向方面编程模块,可提供日志记录支持。