ASP.NET MVC Отключить кэширование представлений в переопределенном VirtualPathProvider - PullRequest
6 голосов
/ 14 марта 2011

Я занимаюсь разработкой, используя переносимые области, поэтому у меня есть переопределенный VirtualPathProvider.

Мой public override bool FileExists(string virtualPath), кажется, вызывается только каждые несколько минут, что означает, что MVC кэширует представления.

Это, вероятно, здорово в производстве, но я не могу понять, как отключить его в dev.Я хочу, чтобы VirtualPathProvider вызывали при каждом использовании представления.

Есть предложения?

1 Ответ

6 голосов
/ 27 мая 2011

Отвечая на мой вопрос ради будущих поколений ....

В итоге мы переопределили вызов 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);  
        }
    }
...