IsLine.HttpContent.HttpContentProvider 命名空間統一封裝了 Cache、Session、Cookie 三大 HTTP 狀態管理物件,提供一致的介面契約與豐富的快取依賴、過期策略支援。本文深入解析 CacheProvider 的核心架構、兩種快取類型、依賴模式與實戰用法。
1. 介面契約體系
namespace IsLine.HttpContent.HttpContentProvider {
public interface IBaseCapability {
bool Remove(string Name);
bool IsExit(string Name);
}
public interface ICapability : IBaseCapability {
object GetContent(string Name);
bool UpdateContent(string Name, object value);
}
}
CookieProvider:實作 IBaseCapability(僅字串操作)
SessionProvider、CacheProvider:實作 ICapability(支援物件操作)
2. CacheProvider 核心架構
2.1 兩種快取類型
| 類型 | 來源 | 生命週期 | 適用場景 |
| HttpRuntime Cache | HttpRuntime.Cache | 應用程式域級別 | 全站共享、非 Web 程式亦可存取 |
| HttpContext Cache | HttpContext.Current.Cache | 單一請求級別 | 僅限 Web 請求內部使用 |
2.2 過期策略
| 類型 | 說明 |
| 滑動過期 | 自上次存取起經過指定時間過期 |
| 絕對過期 | 固定時間點過期,不受存取頻率影響 |
2.3 依賴模式
| 依賴類型 | 觸發移除條件 |
| 檔案依賴 | 指定檔案修改或刪除 |
| SQL 依賴 | SQL Server 2005/2000/7.0 資料表變更(2005 支援列級) |
3. CacheProvider 完整方法表
| 建構函式 | 說明 |
CacheProvider() | 預設 HttpRuntime Cache,無依賴 |
CacheProvider(string cacheName) | 指定快取名稱 |
CacheProvider(CacheType type, string name, CacheDependencyType depType, object dep) | 完整指定:快取類型、名稱、依賴類型、依賴物件 |
| 核心方法 | 說明 |
GetContent() / GetContent(name) | 取得快取內容 |
UpdateContent(obj) / UpdateContent(name, obj) | 新增/更新快取 |
Remove() / Remove(name) | 移除快取 |
IsExit() / IsExit(name) | 判斷快取是否存在 |
4. 列舉型別定義
namespace IsLine.HttpContent.HCDataTypeEnum {
public enum DateType { Days, Hours, Years, Minutes }
public enum CacheType { HttpRuntime, HttpContext }
public enum CacheDependencyType { Sql, File, None }
public enum RemoveType { RemoveInput, RemoveAllExcludeInput }
}
5. 關鍵行為:快取名稱的動態切換
var cp = new CacheProvider("A");
cp.GetContent(); // 存取 "A"
cp.IsExit("B"); // 檢查 "B"
cp.GetContent(); // 此時存取變為 "B"!後續無參數呼叫將跟隨最後指定名稱
注意:帶名稱參數的呼叫會暫時切換內部預設快取名稱,影響後續無參數呼叫。
6. 結語
CacheProvider 以統一介面抽象了 ASP.NET 複雜的快取機制,支援雙快取類型、雙過期策略、雙依賴模式,並透過列舉型別實現型別安全配置。下一篇將探討 SessionProvider 與 CookieProvider 的進階整合應用。