ASP.NET MVC中的面向方面编程

本文关键字:方面 编程 NET MVC ASP | 更新日期: 2023-09-27 17:59:27

我目前正在ASP.NET中开发一个MVC应用程序,我正在尝试分离关注点,以便最终获得更干净、更可维护的代码。

因此,作为一个起点,我想到了日志方面。我的想法是(最初)记录每个控制器中每个方法的调用和返回。我会把这个逻辑放在一个单独的类上,专门用于日志记录,这样我就不会在代码中到处都有日志记录语句。

我还需要访问Http请求,以便获得客户端信息。

有没有一种综合的方法来做到这一点?ASP.NET MVC是否可以像Java中的AspectJ一样用于方面文件?

此外,以后是否可以将其配置为记录满足某些条件的方法?(如签名、返回值、异常抛出等)

提前非常感谢!

ASP.NET MVC中的面向方面编程

您可以使用属性以面向方面的方式实现功能。你想用你的功能包围的动作方法只需要用你的属性来装饰:

[CustomLogger]
public ActionResult Index()
{
    // Doing something here ...
    return View();
}

您可以用一个属性、一个完整的控制器来装饰单个操作方法,甚至可以通过ASP.NET MVC的GlobalFilterCollection全局应用该属性。

以下是如何声明您的属性:

public class CustomLoggerAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        // Here goes your logic
    }
    // ...
}

ActionFilterAttribute类允许您重写两个方法,以便挂接ASP.NET MVC的操作执行管道:

  • OnActionExecuting
  • OnActionExecuted
  • OnResultExecuting
  • OnResultExecuted

您可以通过传递给上述方法的参数(如ActionExecutedContext)访问请求变量。