數據庫資源條目
先來回顧一下要存儲實際資源條目的數據庫表結構或許對您有所幫助。示例包含一段 SQL 腳本,用於創建名為 CustomResourceProvidersSample 的數據庫,還包含一個名為 StringResources 的表。表 1 包含以下字段:
表 1. 具有資源條目的數據庫表
字段 說明resourceType
每種資源的類別。可用其區分不同頁面的本地資源,或根據用戶定義的名稱區分全局資源類型。
cultureCode
來自 .NET 所使用的受支持的 CultureInfo 代碼中的區域性代碼,基於 ISO 標准。還可以針對任何缺失代碼來擴展該代碼。
resourceKey
用於檢索資源的資源鍵。
resourceValue
資源值。此表支持字符串多達 4K。
在本示例中,所有資源均存儲在一個單獨的表中,盡管在更復雜或更大規模的環境下為了優化典型的使用模式,可以將其分布於幾個表之中。此表的主鍵是一個組合鍵,包括 resourceType、cultureCode 和 resourceKey。單個資源值通常使用主鍵請求。圖 5 顯示了表內容的部分視圖。
圖 5. 此示例資源條目的部分視圖
頁面資源的 resourceType 是頁面名稱,包括其在應用程序中的相對路徑(即 Expressions.aspx,SubDir1/Expressions.aspx)。此慣例會區分不同子目錄中相同名稱的頁面,這與默認資源提供程序模型按子目錄來識別不同的本地資源程序集的方式類似。控件屬性的資源鍵遵循與典型的頁面資源相同的命名慣例,即使用控件前綴和屬性名稱,語法如下。
[Prefix].[PropertyName]
全局資源具有用戶定義的 resourceType。示例代碼具有幾種全局資源類別:Glossary、CommonTerms 和 Config。本例中的資源鍵很直觀針對其內容進行命名。
數據訪問層 StringResourcesDALC 將根據提供程序模型的使用模式來提取工作以從該表中檢索資源。
擴展 ResourceProviderFactory
ResourceProviderFactory 類型是 ASP.NET 2.0 中資源訪問的中心,負責根據請求的資源類型來返回全局或本地資源提供程序。ResourceProviderFactory 是一個抽象的基類型,需要以下兩種方法的實現:CreateLocalResourceProvider() 和 CreateGlobalResourceProvider()。要創建自定義提供程序工廠,則需繼承此基類型來提供這些方法的實現。兩種方法必須返回實現 IResourceProvider 接口的資源提供程序的實例。
在代碼清單 1 中顯示了基本的 ResourceProviderFactory 類型聲明。
代碼清單 1. ResourceProviderFactory 抽象類型
public abstract class ResourceProviderFactory
{
protected ResourceProviderFactory();
public abstract IResourceProvider CreateGlobalResourceProvider(string classKey);
public abstract IResourceProvider CreateLocalResourceProvider(string virtualPath);
}