最后,我最终创建了一个抽象类: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