在這裡實現了IViewEngine接口提供的RenderView()方法這裡要提供一個ViewLocator的屬性ViewLocator的主要就是根據控制器中傳來的視圖名進行視圖的定位
在RenderView()方法中首先獲取視圖的路徑然後把視圖模板讀進來最後進行模板的解析然後輸出
我們再來看一下ViewLocator是如何實現的他是IViewLocator類型的也就是說SimpleViewLocator實現了IViewLocator接口SimpleViewLocator的實現代碼如下
public class SimpleViewLocator : ViewLocator
{
public SimpleViewLocator()
{
base
ViewLocationFormats = new string[] {
~ iews/{
}/{
}
htm
~ iews/{
}/{
}
html
~ iews d/{
}
htm
~ iews d/{
}
html
};
base
MasterLocationFormats = new string[] {
};
}
}
我們的SimpleViewLocator 是繼承自ASPNET MVC的ViewLocator類而ViewLocator則是實現了IViewLocator接口的由於ViewLocator已經為了完成了全部的工作這裡我們只需修改下他的ViewLocationFormats 來使用我們自己的模板文件就可以了
我們再來看一下類圖那就更加清楚了
注關於模板解析的部分代碼這裡就不說了不在討論范圍內可以自己下載代碼來看
現在我們基本完成了我們的視圖引擎那麼如何讓ASPNET MVC不要使用默認的web forms視圖引擎而使用我們自定義的視圖引擎呢?
在ASPNET MVC中所有的請求都是通過一個工廠類來創建Controller實例的這個工廠類必須實現IControllerFactory 接口默認的實現該接口的工廠類是DefaultControllerFactory這個工廠類就是我們修改默認的視圖引擎為我們的視圖引擎的入口點為了方便我們創建一個繼承:
[] [] []
From:http://tw.wingwit.com/Article/program/net/201311/15015.html