在我以前的文章中詳細介紹了目前mvc框架中的視圖引擎管理,這個視圖引擎可以方便的實現系統多視圖引擎的管理,讓系統可以輕松更好視圖引擎,但是,在一些應用,比如bbs,多用戶blog中,往往需要提供用戶自選skin的功能,比如bbs中某個用戶通過菜單可以隨意更換自己的skin設置,而mvc框架的默認視圖管理器對這個要求就無法做到了,而本文則是使用viewengine規則來實現一個用戶自選視圖引擎的功能.
在本系統中,用戶選擇的skin信息將保存在cookie中,這意味著可以讓用戶控制這個選擇保存的時間.
首先,這個系統仍然是基於ViewEngine,我們在以前的文章中可以看到,mvc框架用一個AutoViewEngine來管理存在的所有ViewEngine,那麼我們也可以考慮用一個SelectViewEngine來管理一系列我們特定的可選擇ViewEngine.下面先看看這個核心部分的類:
從圖中可以看到,這兒我們提供了一個新的接口ISelectViewEngine,它在普通的ViewEngine上添加了一個新的Name屬性,該屬性標示著唯一的視圖引擎名稱,然後我們對WebFormViewEngine進行封裝,並實現ISelectViewEngine接口:
Code
public SelectWebFormViewEngine(string name) {
Name = name;
MasterLocationFormats = new[] {
"~/skins/" + Name + "/{1}/{0}.master",
"~/skins/" + Name + "/shared/{0}.master"
};
ViewLocationFormats = new[] {
"~/skins/" + Name + "/{1}/{0}.aspx",
"~/skins/" + Name + "/{1}/{0}.ascx",
"~/skins/" + Name + "/shared/{0}.aspx",
"~/skins/" + Name + "/shared/{0}.ascx"
};
PartialViewLocationFormats = ViewLocationFormats;
}