本节再次提供简单的对: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 Controller和MVC 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、您可以很容易的继续扩展。
编辑2011/9/8 4:20:31 | ASP.NET MVC教程 |
|