共用方式為


配接器對應

更新:2007 年 11 月

「配接器」(Adapter) 會定義特殊要求裝置的一組特性。假設您正在依據 Palm Pilot 設計新的裝置,而且您想要修改及增強硬體。為了針對新裝置開發 ASP.NET Mobile Web 網頁,您需要自訂的裝置配接器才能充分利用增強硬體功能集。

在 Web.config 檔案內,您將每個行動控制項對應至您為行動控制項建立的自訂配接器。您不僅可以指定個別裝置配接器集來達到裝置特定自訂,還可以繼承另一個裝置配接器集以達到更進一步的自訂,進而自訂特定裝置/控制項組合的行為。

在 Web.config 檔內部

若要對應行動控制項與裝置配接器,請以宣告方式在 <system.web> 項目的 <mobileControls> 區段中進行設定。您可以在 Web.config 檔中進行這項設定,如此就能讓變更隔離到指定的應用程式中。全伺服器的設定位於您的 Microsoft Windows 目錄下之 .NET Framework 安裝的 Machine.config 檔中。在組態檔中,您可以指定在執行階段選擇的個別配接器集。

注意事項:

如果目前 Web.config 檔中並不存在 <mobileControls> 區段,您可以在任何位置將一個區段加入成為 <system.web> 項目的子系。

宣告配接器集

裝置配接器集是 Web.config 檔內的對應機制。對於每個會使用自訂裝置配接器的控制項,您都必須在其裝置配接器集內包含下列資訊:

  • 述詞 (Predicate) 類別

  • 述詞方法

  • 頁面配接器

  • 控制項的名稱和關聯的裝置配接器

若要將裝置配接器集加入至應用程式的 Web.config 檔,您必須使用 Web.config 檔 <mobileControls> 區段中的 <device> 項目來宣告裝置配接器集,如下列程式碼範例所示。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <!-- Other settings previously specified reside here. -->
    <mobileControls>
      <device name="myDeviceAdapter"
        predicateClass="fullyQualifiedAdapterClass"
        predicateMethod="specificMethodToInvoke"
        pageAdapter="fullyQualifiedPageAdapter">
          <control name="fullyQualifiedControl"
            adapter="fullyQualifiedPageAdapter"/>
          <!-- Add additional control names here. -->
      </device>
    </mobileControls>
  </system.web>
</configuration>

定義裝置屬性

正如上一個程式碼範例所示,您必須在每個配接器集中包含下表所定義的屬性 (Attribute)。

詞彙

定義

name

會唯一識別裝置配接器集。

InheritsFrom

(選擇性) 表示目前的裝置配接器集繼承自另一個裝置配接器集,這點可由名稱辨識。父代裝置配接器集可位於相同 Web.config 檔之相同 <mobileControls> 區段中的任何一個位置,或是位於父代 Web.config 檔中。

PredicateClassPredicateMethod

指向用於評估配接器集是否適用於目前裝置時所呼叫的靜態 (Static) 方法。這個方法接受 HttpContext 型別的單一參數,並會傳回指示配接器集是否適用的布林值 (Boolean)。這個方法可使用所提供 HttpContext 物件的 Browser 屬性 (會傳回 MobileCapabilities 物件) 檢查目標裝置的功能。

PageAdapter

可識別裝置集的頁面配接器類別,其具有會實作 IPageAdapter 介面的型別。

如果 <device> 區段包括 InheritsFrom 屬性,您就不需要宣告 PredicateClassPredicateMethodPageAdapter 屬性。而是,您的裝置配接器集可從父代裝置配接器集定義繼承這些屬性。

注意事項:

雖然這些屬性不是必要項,您仍然可以在其適用於您的應用程式時加以定義。

您可以在配接器集內置入任何數目的 <control> 項目。其中每個項目都會提供特定的控制項配接器集對應 (即實作 IControlAdapter 的類別)。<control> 項目具有兩個屬性:一個是可指定所要對應控制項之類別的 name 屬性,另一個是可指定控制項配接器之類別的 adapter 屬性。

對應考量

雖然控制項與配接器之間有一對一對應關係,但是不需要針對每個控制項/裝置組合撰寫個別的控制項配接器類別。一般而言,如果新的行動控制項是使用繼承 (Inheritane) 或簡單撰寫,而且不需要自訂輸出,這時它就不需要控制項配接器。請考量下列替代做法:

  • 配接器或配接器集可套用至一般類型裝置。例如,所有的 HTML 3.2 裝置可具有同一裝置配接器集。然而,對於某些控制項,可能會出現針對更加特定之裝置的特製化裝置配接器。例如,您可能需要針對 Pocket PC 特別撰寫 Calendar 控制項裝置配接器。

  • 控制項配接器可能與控制項基底類別 (Base Class) 關聯,而不與個別控制項關聯。例如,單一配接器可能足以用來呈現繼承自 BaseValidator 類別的所有驗證程式控制項。

  • 您甚至還可以撰寫不使用裝置配接器的全功能行動控制項。然而,建議開發人員在適當的位置撰寫裝置配接器,因為如果網頁上的任何單一控制項不使用裝置配接器,則會損失架構的大部分彈性。

  • 擴充現有控制項而建立的新控制項,包括使用者控制項 (User Control)、複合控制項 (Composite Control),以及透過繼承建立和包含現有控制項的控制項,由於會使用被收納的控制項 (Contained Control) 的配接器,所以並不需要裝置配接器。

了解裝置配接器的選擇程序

下列程序說明如何選取網頁的裝置配接器集:

  1. ASP.NET 會依照 Web.config 檔 <device> 區段中的定義,逐一查看裝置配接器集的集合。首先會檢查最接近要求之頁面的 Web.config 檔,然後再檢查位於組態階層架構中較高處之每個連續的 Web.config 檔。最後才會檢查 Machine.config 檔。

  2. 每個裝置配接器集的關聯述詞,都會使用 predicateClass 和 predicateMethod 屬性進行評估。

  3. 每個述詞都會使用所提供的 HttpContext 物件來檢查目標裝置的裝置功能,並會傳回 true 或 false,指出裝置配接器集是否適用。

  4. 只要任何一個述詞傳回 true,這時該裝置配接器集就會視為已選取。此時,系統會使用 <device> 項目的 pageAdapter 屬性,決定哪一個類別要建立執行個體 (Instance) 來建立配接器。

  5. 如果 Web.config 檔中的述詞都沒有傳回 true,則會針對父目錄之 Web.config 檔中的裝置配接器集重複此處理程序。

針對每個控制項,呼叫網頁來提供指定控制項型別的裝置配接器。ASP.NET 使用下列步驟來選擇適當的控制項配接器:

  1. 使用的裝置配接器集是為網頁的裝置配接器選擇的同一裝置配接器集。

  2. 如果裝置配接器集包含可將控制項類別直接對應至裝置配接器類別的 <control> 項目,則會建立所指定配接器類別的執行個體。

  3. 如果無法直接對應裝置配接器集,則會建立控制項基底類別的新執行個體。

    這項處理程序會重複執行,直到執行到 Control 基底類別。在任何時間,如果找到直接對應,便會建立指定之裝置配接器類別的新執行個體。

  4. 如果仍然未找到對應,並且裝置配接器集繼承自另一配接器集,則會針對父代配接器集重複配接器選擇步驟。往配接器集階層架構高層繼續,直到找到對應。

查閱的結果會進入快取,因此只需要對第一個相關的控制項執行一次所指定的查閱。保留前面說明的行為。

請參閱

其他資源

加入新裝置配接器和裝置支援