2011-03-14 33 views
5

Tôi đang làm một số công việc dev bằng cách sử dụng khu vực di động vì vậy tôi có một ghi đè VirtualPathProvider.ASP.NET MVC Vô hiệu hóa xem bộ nhớ đệm trong ghi đè VirtualPathProvider

My public override bool FileExists(string virtualPath) dường như chỉ được gọi mỗi vài phút, có nghĩa là MVC đang lưu vào bộ nhớ cache chế độ xem.

Điều này có thể rất lớn trong sản xuất nhưng tôi không thể tìm ra cách tắt nó trong dev. Tôi muốn số VirtualPathProvider để được gọi vào mỗi lần sử dụng chế độ xem.

Mọi đề xuất?

+0

Bạn có chắc là MVC đang lưu trong bộ nhớ cache chứ không phải trình duyệt của bạn? ctrl-F5 để xem liệu chế độ xem của bạn có được gọi hay không. –

+0

Cảm ơn câu hỏi và câu trả lời, nó giải quyết vấn đề bộ nhớ đệm khá khó chịu của tôi khi có một cái nhìn bên trong một DLL! –

Trả lời

6

Trả lời câu hỏi của riêng tôi vì lợi ích của các thế hệ tương lai ....

Chúng tôi đã kết thúc cuộc gọi trọng GetCacheDependency để đảm bảo rằng quan điểm là không bao giờ lưu trữ. (Chế độ xem bộ nhớ cache của chúng tôi theo cách thủ công). Chúng tôi đã phải tạo một FakeCacheDependency cho phép chúng tôi sử dụng ngày sửa đổi cuối cùng từ bộ nhớ cache của chúng tôi.

Trong ứng dụng của chúng tôi, các khung nhìn ảo của chúng tôi được gọi là CondorVirtualFiles. (Khi xây dựng công cụ chế độ xem, bạn cần đặt cho nó một cái tên hay.)

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 Cảm ơn bạn !!! Chỉ muốn chia sẻ một số ý tưởng. Bạn cũng phải ghi đè phương thức 'GetFileHash()'. Ngoài ra, bạn có thể trả về 'null' thay vì một cá thể' FakeCacheDependency'. Và tôi đã tìm thấy một tài nguyên hữu ích: http://blog.rocketbase.co.uk/2011/04/asp-net-mvc-virtual-path-provider/ – Warlock

Các vấn đề liên quan