首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MVC5中更改VirtualPathProvider

在MVC5中更改VirtualPathProvider
EN

Stack Overflow用户
提问于 2013-10-23 21:31:55
回答 1查看 2.2K关注 0票数 2

我将我的MVC4项目移植到MVC5,之后我的视图被嵌入,因为资源无法加载。问题是当mvc搜索视图时,它使用的是继承自BuildManagerViewEngine的视图引擎。这个类通过构造函数将FileExistenceCache与VirtualpathProvider一起使用。默认情况下,当我在HostingEnviroment中将provider更改为我的自定义提供程序时,不会对现有的FileExistenceCache实例进行任何更改,因为我的视图不是建立的。

我在路由配置类中更改了VirtualpathProvider,但为时已晚。有什么地方更适合做这件事?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-10-26 10:43:46

而是将现有的“IViewEngine”子类化以使用自定义VirtualPathProvider。然后在Global.asax文件中注册您的自定义引擎。

代码语言:javascript
复制
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        ViewEngines.Engines.Add(new MyViewEngine());
    }

    private class MyVirtualPathProvider: VirtualPathProvider {}

    private class MyViewEngine : RazorViewEngine
    {
        public MyViewEngine()
        {
            this.VirtualPathProvider = new MyVirtualPathProvider();
        }
    }
}

这样,您还可以通过在Engines集合中的适当位置添加、插入您的引擎来控制哪个引擎具有优先级。

作为替代,您可以使用PreApplicationStartMethodAttribute替换VirtualPathProvider,但对于所有标准IViewEngine,这将全局更改提供程序。

代码语言:javascript
复制
[assembly: PreApplicationStartMethod(
    typeof(MyNamespace.MyInitializer), "Initialize")]

然后在类中的public static方法中交换提供程序:

代码语言:javascript
复制
public static class MyInitializer
{
    public static void Initialize() { 
        HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider());
    }
}

Phil Haack有一篇很好的帖子:Three Hidden Extensibility Gems in ASP.NET 4

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19543103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档