在这里实现了IViewEngine接口提供的RenderView()方法这里要提供一个ViewLocator的属性ViewLocator的主要就是根据控制器中传来的视图名进行视图的定位
在RenderView()方法中首先获取视图的路径然后把视图模板读进来最后进行模板的解析然后输出
我们再来看一下ViewLocator是如何实现的他是IViewLocator类型的也就是说SimpleViewLocator实现了IViewLocator接口SimpleViewLocator的实现代码如下
public class SimpleViewLocator : ViewLocator
{
public SimpleViewLocator()
{
baseViewLocationFormats = new string[] { ~ iews/{}/{}htm
~ iews/{}/{}html
~ iews d/{}htm
~ iews d/{}html
};
baseMasterLocationFormats = new string[] { };
}
}
我们的SimpleViewLocator 是继承自ASPNET MVC的ViewLocator类而ViewLocator则是实现了IViewLocator接口的由于ViewLocator已经为了完成了全部的工作这里我们只需修改下他的ViewLocationFormats 来使用我们自己的模板文件就可以了
我们再来看一下类图那就更加清楚了
注关于模板解析的部分代码这里就不说了不在讨论范围内可以自己下载代码来看
现在我们基本完成了我们的视图引擎那么如何让ASPNET MVC不要使用默认的web forms视图引擎而使用我们自定义的视图引擎呢?
在ASPNET MVC中所有的请求都是通过一个工厂类来创建Controller实例的这个工厂类必须实现IControllerFactory 接口默认的实现该接口的工厂类是DefaultControllerFactory这个工厂类就是我们修改默认的视图引擎为我们的视图引擎的入口点为了方便我们创建一个继承:
[] [] []