ASP.NET MVC在重写的VirtualPathProvider中禁用视图缓存

Cod*_*ack 6 asp.net-mvc virtualpathprovider

我正在使用便携式区域做一些开发工作,所以我有一个被覆盖的VirtualPathProvider.

public override bool FileExists(string virtualPath)似乎每隔几分钟就会调用一次,这意味着MVC正在缓存视图.

这可能是很好的生产,但我无法弄清楚如何在开发中关闭它.我希望在VirtualPathProvider每次使用视图时调用它.

有什么建议?

Cod*_*ack 6

为了后代而回答我自己的问题....

我们最终覆盖了GetCacheDependency调用,以确保视图永远不会被缓存.(我们手动缓存视图).我们必须创建一个FakeCacheDependency,它允许我们使用缓存中的最后修改日期.

在我们的应用程序中,我们的虚拟视图称为CondorVirtualFiles.(构建视图引擎时,需要给它一个很酷的名字.)

public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)
        {
            var view = this.GetFile(virtualPath);
            if (view is CondorVirtualFile)
            {
                FakeCacheDependency fcd = new FakeCacheDependency((view as CondorVirtualFile).LastModified);
                return fcd;
            }
            return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
        }



 public class FakeCacheDependency : System.Web.Caching.CacheDependency
    {
        public FakeCacheDependency(DateTime lastModified)
        {
            base.SetUtcLastModified(lastModified);
        }
        public FakeCacheDependency()
        {
            base.SetUtcLastModified(DateTime.UtcNow);  
        }
    }
Run Code Online (Sandbox Code Playgroud)