在它的原始狀態(tài)中,緩存應(yīng)用程序塊在典型的緩存情況下工作得很好,然而,許多時候你不得不定制應(yīng)用程序塊的某些行為以更好的適用于應(yīng)用程序的特定環(huán)境。在此有二種方法可以用來定制:擴(kuò)展和修改。
擴(kuò)展應(yīng)用程序塊 可以通過指定擴(kuò)展點(diǎn)來擴(kuò)展應(yīng)用程序。通常,可以定制一個實現(xiàn)了特定接口或從一個抽象類派生出的類。因為那些定制類存在于你的應(yīng)用程序空間中,所以不用修改或重建應(yīng)用程序塊,而是使用配置設(shè)置來指定擴(kuò)展點(diǎn)。
可以用添加一個新的后端存儲類型或新的到期策略來擴(kuò)展應(yīng)用程序塊。更多信息,請參見添加新的后端存儲和添加新的到期策略。
修改應(yīng)用程序塊 可以通過改變應(yīng)用程序塊的源代碼來修改它,這可能也可能不需要相關(guān)配置的改變。因為修改是相對于源代碼的,所以在修改起作用之前必須重建應(yīng)用程序塊。同樣也必須準(zhǔn)備處理支持和版本發(fā)布。更多信息,請參見修改緩存應(yīng)用程序塊。
添加新的后端存儲 要添加一個新的后端存儲,可以實現(xiàn)一個實現(xiàn)了 IBackingStore 接口或者從 BaseBackingStore 抽象類繼承的類。必須保證你的實現(xiàn)在任何操作訪問后端存儲時如果發(fā)生異常,后端存儲也依然是完整的。
因為 Cache 對象的操作方法,要保證任何后端存儲都要以單線程的方式被調(diào)用。這意味著你的實現(xiàn)可以不是線程安全的。
添加新的到期策略 緩存應(yīng)用程序塊允許添加自己的到期策略,可以構(gòu)建一個實現(xiàn)了下列接口的新類來完成此目的:
ICacheItemExpiration 此接口讓開發(fā)人員實現(xiàn)他們自己的到期模式。它是一個應(yīng)用定義的管理一個CacheItem 對象如何以及何時可以到期的規(guī)則的接口。
ICacheItemRefreshAction 此接口刷新一個過期的緩存條目。
ICacheItemRefreshAction 接口定義了必須實現(xiàn)的創(chuàng)建一個對象的規(guī)約,這個對象刷新來自緩存的到期的條目。實現(xiàn)的類必須是可序列化的。在實現(xiàn)此接口時,確認(rèn)它僅維護(hù)有關(guān)它的環(huán)境需要的狀態(tài)量,因為環(huán)境的所有部分都將被序列化,維護(hù)過多的狀態(tài)將導(dǎo)致巨大的對象圖。
修改緩存應(yīng)用程序塊 緩存應(yīng)用程序塊為用于各種應(yīng)用程序和通用目的的緩存而設(shè)計,擴(kuò)展點(diǎn)可以使你適配應(yīng)用程序塊滿足任何特殊應(yīng)用程序的需求。然而,如果要添加新的特性到應(yīng)用程序塊中,就可以修改其源代碼來達(dá)到目的(安裝程序包含了源代碼和二進(jìn)制)。在這種情況下,將按照下列建議來修改。
修改緩存應(yīng)用程序塊的建議 在修改源代碼時,下面是最好的實踐經(jīng)驗:
通過閱讀文檔中的緩存應(yīng)用程序塊設(shè)計節(jié)來確認(rèn)你理解了應(yīng)用程序塊是如何工作的。
如果顯著的改變了源代碼,或者要將應(yīng)用程序塊的定制版本與原始版本一起使用的話,考慮改變緩存應(yīng)用程序塊的命名空間。請注意,修改應(yīng)用程序塊的命名空間將需要修改所有使用了緩存應(yīng)用程序塊的其他應(yīng)用程序塊和應(yīng)用程序的命名空間。
使用強(qiáng)名稱。強(qiáng)名稱可以唯一標(biāo)識程序集、版本和驗證完整性。這將不得不生成自己的密鑰對來簽名修改了的應(yīng)用程序塊版本。更多信息,請參見強(qiáng)命名程序集和版本指南。另一種選擇是,可以選擇不簽名定制的版本,這可以被引用為弱名稱。
要使修改起作用,必須重新編譯修改后的源代碼。
|