2011-03-14 74 views
5

Robię trochę pracy programisty wykorzystując obszary przenośne, więc mam nadpisany VirtualPathProvider.ASP.NET MVC Wyłącz buforowanie widoku w przesłoniętym obiekcie VirtualPathProvider

Moje public override bool FileExists(string virtualPath) wydaje się być wywoływana tylko co kilka minut, co oznacza, że ​​MVC buforuje widoki.

To jest prawdopodobnie wspaniałe w produkcji, ale nie mogę się dowiedzieć, jak wyłączyć to w dev. Chcę uzyskać wywołanie VirtualPathProvider przy każdym użyciu widoku.

Wszelkie sugestie?

+0

Czy jesteś pewien, że to MVC buforuje widok, a nie przeglądarkę? ctrl-F5, aby sprawdzić, czy widok zostanie wywołany. –

+0

Dzięki za pytanie i odpowiedź, rozwiązał mój dość irytujący problem z buforowaniem, gdy masz widok wewnątrz biblioteki DLL! –

Odpowiedz

6

Odpowiadając na moje własne pytanie dla dobra przyszłych pokoleń ....

Skończyło się nadrzędne wywołanie GetCacheDependency aby upewnić się, że widok nie jest buforowane. (Mamy widoki pamięci podręcznej ręcznie). Musieliśmy stworzyć FakeCacheDependency, która pozwala nam użyć daty ostatniej modyfikacji z naszej pamięci podręcznej.

W naszej aplikacji nasze wirtualne widoki są nazywane CondorVirtualFiles. (Podczas budowania mechanizmu wyświetlania należy nadać mu chłodną nazwę).

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); 
     } 
    } 
+0

+1 Dziękuję !!! Chciałem tylko podzielić się pomysłami. Musisz również przesłonić metodę 'GetFileHash()'. Również możesz zwrócić 'null' zamiast instancji' FakeCacheDependency'. I znalazłem pomocne źródło: http://blog.rocketbase.co.uk/2011/04/asp-net-mvc-virtual-path-provider/ – Warlock