Asp.Net Mvc终于等来了新版本,这次仍然是Preview版.该版本中加入了不少新特性.特别是在ViewEngine的管理上.得到了很大的改进,不仅让用户可以更方便的更换ViewEngine,而且还可以在一个系统中使用多个ViewEngine的可能得到了实现,本文将探索新版和老版中viewengine的工作方式并进行对比,然后演示如何添加一个或者多个ViewEngine并让他们之间可以交互工作.
首先说明下P5对ViewEngine的改进,在老版本中,系统牵涉到ViewEngine管理的有两个接口,分别是: IViewEngine, IViewLocator,其中IVewEngine负责呈现View,IViewLocator负责对View的路径处理.同时,在Controller中对ViewEngine进行选择,让后在执行的时候将ViewEngine传递到ViewResult中,最后ViewResult使用ViewEngine来呈现ui.老版本的View部分大致类图如下:
它的执行流程大致如下:MVC框架根据Routing数据找到对应的Controller,而Controller中将根据IViewLocate来初始化一个ViewEngine(IViewLocater一般用来做路径选择)然后执行Controller的Execute方法,该方法间接通过ControllerActionInvoker来执行Action,每个Action都会返回一个ActionResult对象,然后,它执行ActionResult的ExecuteResult方法.系统有很多种ActionResult,当该ActionResult为ViewResult的时候,Controller会将自身的ViewEngine传递你这个ViewResult,在ViewResult中再最终使用ViewEngine来呈现数据.