6

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

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

这在生产中可能很棒,但我不知道如何在开发中将其关闭。我希望在VirtualPathProvider每次使用视图时都调用它。

有什么建议么?

4

1 回答 1

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);  
        }
    }
于 2011-05-27T15:39:32.073 回答