1

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

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

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

并将日期时间保存到数据库中。但这绝对是不可取的,因为这样做会留下很多横切功能,使维护工作更加困难。我正在考虑使用属性来解决这个问题。PostSharp 在这里似乎是一个很好的候选者,因为它可以拦截方法调用并执行您想要的任何预处理和后处理。但显然缺少的一件事是,如果我不编写大量自定义代码,它就无法处理事件。

有没有可以自然处理事件的框架?

4

3 回答 3

2

Postsharp可能会在这里为您提供帮助

于 2008-12-22T09:55:18.933 回答
1

您不需要为要像这样记录的每个事件都使用单独的方法。

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

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

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

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

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

于 2008-12-22T07:49:42.493 回答
1

Spring框架有一个提供日志支持的面向方面编程模块。

于 2008-12-22T09:41:32.207 回答