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