资源地址:https://stackoverflow.com/questions/23244400/aspect-oriented-programming-in-asp-net-mvc
从页面复制过来的内容:
问题:
我目前正在ASP.NET中开发一个MVC应用程序,我正试图分离关注点,以便最终得到更清晰,更可维护的代码。
所以,作为一个起点,我正在考虑一个日志方面。我的想法是记录(最初)每个控制器中每个方法的调用和返回。我将这个逻辑放在一个专门用于记录的单独的类上,所以我不会在任何地方使用日志语句来破坏我的代码。
我还需要访问Http请求,以便获取客户端信息。
有没有综合的方法来做到这一点?ASP.NET MVC可以像AspectJ一样在Java中使用方面文件吗?
此外,它以后可以配置为记录满足某些条件的方法吗?(如签名,返回值,异常抛出等)
首先十分感谢!
-----------------------------------------------------
回答:
您可以使用属性以面向方面的方式实现功能。您希望使用您的功能包围的操作方法只需要使用您的属性进行修饰:
[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
传递给上述方法的参数(例如)访问请求变量。
----------------------------------------------------end
您最好查看原文,原文比较清晰更容易看懂。