最後,我最終創建了一個抽象類:public abstract class MyViewEngine : BuildManagerViewEngine, IViewEngine { }
,然後實現/覆蓋了FindView
和FindPartialView
方法(其中包含了我的緩存代碼)。我有一個抽象方法public abstract void SetSearchPaths();
,在我的ctor
中被調用。
然後我創建了一個從MyViewEngine
導出的WebForms具體另一個類:
public class MyViewEngineWebForms : MyViewEngine
{
public override void SetSearchPaths()
{
base.MasterLocationFormats = new string[] { "~/Skins/{2}/Views/{1}/{0}.master", "~/Skins/{2}/Views/Shared/{0}.master" };
base.ViewLocationFormats = new string[] { "~/Skins/{2}/Views/{1}/{0}.aspx", "~/Skins/{2}/Views/Shared/{0}.aspx", "~/Skins/Shared/Views/{0}.aspx" };
base.PartialViewLocationFormats = new string[] { "~/Skins/{2}/Views/{1}/{0}.ascx", "~/Skins/{2}/Views/Shared/{0}.ascx", "~/Skins/Shared/PartialViews/{0}.ascx" };
base.FileExtensions = new string[] { "aspx", "ascx", "master" };
}
protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
return new WebFormView(controllerContext, partialPath, null, base.ViewPageActivator);
}
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
return new WebFormView(controllerContext, viewPath, masterPath, base.ViewPageActivator);
}
}
,準確地做了同樣的剃刀,但更改文件擴展.cshtml/.vbhtml和更改WebFormView
到RazorView
。將它們添加到收藏ViewEngine
:
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new SeeTicketsWebFormsViewEngine());
ViewEngines.Engines.Add(new SeeTicketsRazorViewEngine());
,現在他們又完全由側與所有我的自定義緩存邏輯的工作,一邊。
你試過了嗎? – jgauffin
我編輯了我的問題,我覺得我不夠清楚。 – eth0