ASP.NET MVC中不得不知的13个扩展点
1. RouteConstraint
   实现接口IRouteContraint;
2. RouteHandler
   一般在路由确定之后,我们会依赖mvc提供的MvcRouteHandler去处理http请求;
3. ControllerFactory
   默认的控制器创建工厂会去查找所有实现了IController并且类名以Controller结尾的类,
   然后用其无参构造函数初始化它。如果你需要使用依赖注入,那么你就不能用默认的工厂类了,
   你必须使用带控制反转的控制器工厂类。例如MvcContrib,或者Ninject Controller Factory。
4. ActionInvoker
   它负责通过方法名,动作名或者其他选择子属性来调用动作,接着它调用动作方法并着一些已定义的过滤,
   最后它才执行动作结果。
   如果你认为默认提供的ControllerActionInvoker消耗了太大的时间,那么你可以替换它。
5. ActionMethodSelectorAtribute
   默认实现会通过名字来选择相应的动作,但是你也可以实现自己的方法选择子。mvc框架中的AcceptVerbs就是
   一个例子。
   一个可能的应用场景是你想根据浏览器类型或者是语言设置来确定动作。
6. AuthorizationFilter
   filter会在动作之前被执行,它们会验证请求是否合法;
   自带的Authorize属性就是一个典型例子,它验证当前用户是否可以执行这个动作。还有一个例子
   是ValidateAntiForgeryToken,用于防止CSRF攻击。
7. ActionFilter
   它在动作之前和之后被执行。一个例子是OutputCache。我个人认为,它很利于视图的组建化,动作
   只需要专注于主要逻辑,视图所需要的其他数据可以通过action filter来获取。
8. ModelBinder
   默认提供的实现会通过名字直接把http参数映射到动作方法的参数上,例如我们有http参数
   user.address.city,它会找到方法参数user中名为Address的属性,然后设置这个属性的City属性的值。
9. ControllerBase
   通过Wizard创建的控制器会默认继承至ControllerBase;当然你可以定义个公共的控制器继承至它,然后其他
   所以的控制器都继承至你定义的那个公共控制器。
10. ResultFilter
    与ActionFilter相仿,在ActionResult之前和之后被执行。
11. ActionResult
    需要实现ExecuteResult方法。
12. ViewEngine
13. HtmlHelper
    我们必须保证View里面非常短小简洁,所以会通过扩展HtmlHelper来尽量让View是可测的。
Advertisements