ASP.NET MVC开发专题博客

ASP.NET MVC开发专题博客,为您精选ASP.NET MVC开发教程,助您开发愉快!

公告信息
欢迎光临ASP.NET MVC开发专题博客,祝您开发愉快!
文章档案
最新评论

ASP.Net MVC优化Action FitlerAttribute次数

本节再次提供简单的对:ASP.Net MVC优化Action FitlerAttribute编写次数的优化策略,希望对大伙有所帮助,内容如下:

ASP.NET MVC 3.0中为我们提供了一个GlobalFilters(GlobalFilterCollection)用于注册全局Filter,但它也不够灵活——其实也不能这么说,因为它的目的本来就只是要提供一个全局的Filter注册器。除了GlobalFilters外,ASP.NET MVC 3.0 RC相较于2.0 RTM增加了10个左右的接口、类或枚举来增强Filter,并且为ControllerActionInvoker增加了2个构造函数来配合这一切。目前白皮书上只有寥寥几句提到这方面而已。

在今天的Demo中,我实现了一个FilterRegistryFilterProvider:IFilterProvider,它与GlobalFilters比较的优点在于提供了一种可扩展、可配置的Filter注入方式:

1、摒弃在MVC ControllerMVC Action上标记Attribute的方式实现Filter注入的方式。这种方式通过反射来实现的,虽然我对反射并无恶感。既然能提高那么一点点性能,又何乐而不为呢。而且将Filter在Controller外部注入,也去除了与Controller的耦合性。GlobalFilters当然也是不用Attribute标记的。
2、如果有AController、BController、CDEFG...等,可以指定只在某些Controller注入Filter,需求改变时,可以方便取消注入。而这一切都不用动我们已经编译好的Controllers。
3、如果AController的ActionA和BController的ActionC需要某个Filter,可以精确注入。
4、可以让某个或某些MVC Route下的Action注入
5、可以让某个RouteValue等于(不等于、包含)某个值的请求注入Filter。
6、多个条件组合起来判断,满足高级需求。
7、在系统初始化时,可以像GlobalFilters那样对Filter实例进行缓存,避免不必要的重复创建销毁过程
8、您可以很容易的继续扩展。

下载地址:FilterRegistryDemo

本文ASP.Net MVC优化Action FitlerAttribute编写次数到此为,感兴趣的朋友可以下载源码进行研究。


如果涉及数据库操作,推荐一款配套的ORM框架:CYQ.Data 通用数据层框架

2011/9/8 4:20:31 | ASP.NET MVC教程 | |

  • 发表评论