快捷搜索:

体验AspNet MVC Preview5(1)-探索ViewEngine的原理并比较

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来出现数据.

然则在P5中,这个系统进行了较大年夜的改进,增添了不少部分,使得扩展和治理加倍方便了,当然,响应的,系统的繁杂度也加大年夜了.P5中关于ViewEngine的类图大年夜致如下:

这个系统的履行流程大年夜致如下:Mvc框架根据Routing中的数据找到响应的Controller(Controller实现了IController接口,且它不再治理ViewEngine),一个Controller包孕一个IActionInvoker工具(将曩昔的ControllerActionInvoker接口化了),Controller中的Execute措施间接履行IActionInvoker的InvokeAction措施,系统默认的ActionInvoker将在该措施中心接履行Action,而每个Action会返回一个ActionResult,在P5中,系统自带了两种和ViewEngine有关的ActionResult,分手为: PartialViewResult和ViewResult,它们的承袭关系可以见图,然后ViewResult会调用IViewEngine的FindPartialView或者FindView措施来获取对应的ViewEngineResult,着末调用ViewEngineResult中的IView的Render措施来出现View.别的,系统中还有一个ViewEngines类来治理所有的ViewEngine,用户可以向ViewEngies中添加或者删除自己的ViewEngine.说到这儿可能有人感觉稀罕了,在这个履行流程中.没有任何地方说到ViewEngine的选择问题,假如系统有多个ViewEngine,系统怎么找到精确的ViewEngine并履行呢?着实,这只是系统将查找ViewEngine的事情交给了一个特殊的ViewEngine来完成,这便是CompositeViewEngine,它也便是ViewEngines.DefaultEngine这个特殊的ViewEngine中有一个ICollection工具,该工具实际上和ViewEngines中的ViewEngineCollection是同一工具,它的FindPartialView和FindView措施便是对系统今朝所有的ViewEngine进行查找的措施,在每个PartialViewResult中,默认环境下会包孕这个CompositeViewEngine工具.这样,应用这个ViewEngine出现数据的时刻实际上会间接查找系统中的所有ViewEngine,从而实现了在系统中ViewEngine的混杂应用.别的值得一提的是,在CompositeViewEngine中,系统根据ViewName以及masterName查找的时刻会返回第一个找到的ViewEngine,是以,在拥有多个ViewEngine的时刻要留意加入的先后顺序.

在本篇中,我们探索了ViewEngine的事情模式以及新老版本的事情差异,下篇将实战自定义ViewEngine以及多ViewEngine的交互事情.

您可能还会对下面的文章感兴趣: