【问题标题】:Capturing Events For Logging Purpose为记录目的捕获事件
【发布时间】:2008-12-22 07:19:05
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: .net aop


    【解决方案1】:

    Postsharp 或许可以帮到你

    【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多