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

时间:2011-03-14 20:00:59

标签: asp.net-mvc virtualpathprovider

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

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

这在制作中可能很棒,但我无法弄清楚如何在开发中关闭它。我希望VirtualPathProvider在每次使用视图时都被调用。

有什么建议吗?

1 个答案:

答案 0 :(得分: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);  
        }
    }