2011-02-23 51 views
2

我有一個關於MVC3視圖頁面激活器的問題以及視圖更改如何觸發重新編譯。 BuildManager中似乎有一些魔法,我無法看到,因爲源代碼不適用於符號 - 甚至反射器也無法看到它。MVC3,構建管理器,並在視圖更改時觸發重新編譯

我所做的是實現我自己的VPP和剃刀視圖引擎的子類,用於顯示不在文件系統中的剃刀視圖。我的模擬設置只是返回一個字符串的數據來呈現。這工作正常,但不起作用的是當您更改該數據時,該類不會重新編譯。目前還不清楚如何讓RazorBuildProvider或BuildManager重新生成c#代碼並在VPP返回的數據不同時重新編譯它。

回答

0

在您的VPP中,您需要覆蓋GetCacheDependency()方法,您需要從中返回適當的​​對象。看看它的構造函數可以被監視的東西(比如文件或目錄)。如果您的文件內容位於SQL Server實例中,您也可以使用SqlCacheDependency

+0

這就是我尋找的線索!我遵循此[指南](http://books.google.com/books?id=cND87IlQ9WMC&pg=PA481&lpg=PA481&dq=custom%2Bcache%2Bdependency&source=bl&ots=TSfH1sHw7b&sig=%5FPILUBm1TRfy0Nr2ZJXYKrEf4II&hl=zh-CN&ei=w0QASvDZKYb6%5FAawzYDzBg&sa=X&oi=book% 5Fresult&ct = result&resnum = 9#v = onepage&q = custom%2Bcache%2Bdependency&f = false)實現CacheDependency的子類來檢測內存數據何時發生變化,這是我需要的POC。問題解決了! – core24 2011-02-23 23:52:15

2

雖然GetCacheDependency的確是默認工作的方式(並且marcind指出),但在使用自定義文件存儲時,通常不可能想出CacheDependency對象。

相反,你需要做的是從GetCacheDependency中返回null。但你需要執行GetFileHash使失效正常工作。您返回的哈希值需要基於所有文件的內容。

無論何時您返回與上次查詢頁面時不同的散列,頁面最終都會重新編譯。

當然,你應該確保如果文件不要更改你不斷返回相同的散列,否則頁面將不斷重新編譯,使事情變得非常緩慢。