首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

擴充 ASP.NET 2.0 資源提供者模型(三):自訂表達式建構器 ExternalResourceExpressionBuilder

     編輯:關於ASP.NET

本系列第三篇著重於實作自訂表達式建構器 ExternalResourceExpressionBuilder,支援新前綴 ExternalResource 的宣告式資源繫結語法,使開發者能從外部組件資源檔透過標準表達式語法存取全域資源。

新表達式語法

<%$ ExternalResource: [assemblyName]|[resourceType], [resourceKey] %>

範例:<%$ ExternalResources:CommonResources|CommonTerms, Hello %>

ExpressionBuilder 核心方法實作

方法功能說明
EvaluateExpression非編譯頁面中回傳資源值
GetCodeExpression回傳編譯期生成的程式碼片段,呼叫 GlobalExternalResourceProvider
ParseExpression剖析驗證表達式參數,資源不存在則拋出例外導致頁面剖析失敗
SupportsEvaluate屬性,回傳 true 表示支援非編譯頁面評估

ParseExpression 關鍵實作邏輯

public override object ParseExpression(string expression, Type propertyType, ExpressionBuilderContext context)
{
    if (string.IsNullOrEmpty(expression))
        throw new ArgumentException(...);

    string[] expParams = expression.Split(',');
    if (expParams.Length != 2)
        throw new ArgumentException(...);

    string classKey = expParams[0].Trim();
    string resourceKey = expParams[1].Trim();

    var fields = new ExternalResourceExpressionFields(classKey, resourceKey);

    EnsureResourceProviderFactory();
    IResourceProvider rp = s_resourceProviderFactory.CreateGlobalResourceProvider(fields.ClassKey);
    object res = rp.GetObject(fields.ResourceKey, CultureInfo.InvariantCulture);
    if (res == null)
        throw new ArgumentException($"找不到資源: {fields.ResourceKey}");

    return fields;
}

設計時驗證機制

ParseExpression 在頁面剖析階段(設計時、編譯前)執行,確保資源鍵存在、類型正確,提早發現錯誤,避免執行期驚喜。

整合宣告式用法

<asp:Label ID="labExternalResource" runat="server" 
    Text="<%$ ExternalResources:CommonResources|CommonTerms, Hello %>" 
    meta:localize="false" />

架構優勢

  • 統一資源存取介面,支援多組件、多資源類型。
  • 編譯期驗證與強型別程式碼生成,效能優於反射式存取。
  • 相容現有 ResourceProviderFactory 架構,無縫整合。

此實作完成了從資料庫資源儲存、自訂提供者工廠、到表達式建構器的完整擴充鏈,賦予 ASP.NET 2.0 企業級本地化彈性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved