public class UrlAuthorizeAttribute : AuthorizeAttribute
{
private readonly IUserService userService;
public UrlAuthorizeAttribute(IUserService userService)
{
this.userService = userService;
}
}
我想通过构造器注入service,采用的是Unity IoC。在网上看到一篇文章说是可以通过全局配置文件为指定的Controller配置过滤器,但不知道该怎么实现.
我参考的文章地址:
http://weblogs.asp.net/rashid/archive/2010/05/27/mvcextensions-actionfilter.aspx
UrlAuthorizeAttribute 如果是运用到源码上,在编译时就进行了序列化,在使用时再反序列化。
如果需要注入的话,得在运行时构造Attribute。
其实你最终需要的是Filter而不是Attribute。抓住这个本质,只要在需要Filter的时候初始化就行了。
我的做法是
1、首先建立一个Controller与Filter的关系表
2、从找到Action到执行InvokeAuthorizationFilters之前,将IAuthorizationFilter准备好就行了。
具体做法是实现一个IActionInvoker类,在其GetFilters方法中从关系表中提取出来再构造Filter。
这里是我的实现:
ASP.Net MVC探索之路 - 不想在多个Action上写同样的FitlerAttribute
http://www.cnblogs.com/alby/archive/2010/12/08/1900555.html
http://www.cnblogs.com/alby/archive/2010/12/15/1906485.html