В итоге я создал абстрактный класс: public abstract class MyViewEngine : BuildManagerViewEngine, IViewEngine { }
, а затем реализовал / переопределил методы FindView
и FindPartialView
(в которых был мой кеширующий код).У меня был абстрактный метод public abstract void SetSearchPaths();
, который был вызван в моем ctor
.
. Затем я создал другой класс, производный от MyViewEngine
специально для веб-форм:
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);
}
}
и сделал точното же самое для Razor, но измените расширения файла на .cshtml / .vbhtml и измените WebFormView
на RazorView
.Добавьте их в коллекцию ViewEngine
:
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new SeeTicketsWebFormsViewEngine());
ViewEngines.Engines.Add(new SeeTicketsRazorViewEngine());
, и теперь они снова отлично работают вместе со всей моей собственной логикой кэширования.