配置器 (Adapter) 定義特殊要求裝置的特定特性集。假定您是依據 Palm Pilot 設計新裝置的 OEM,並且您想要修改及增強硬體。若要開發新裝置的 ASP.NET Mobile Web Form 應用程式,您需要自訂的裝置配置器才能充分利用增強型硬體功能集。
在 Web.config 檔案內,您將每個行動控制項對應至您為行動控制項建立的自訂配置器。您不僅可指定裝置特定自訂的個別裝置配置器集,而且還可從另一個裝置配置器集繼承裝置配置器集來進一步自訂,以此方式自訂特定裝置/控制項組合的行為。
Web.config 內部
若要對應行動控制項與裝置配置器,請以宣告方式在 <system.web> 項目的 <mobileControls> 區段中設定。您也可在 Web.config 檔案中進行針對指定應用程式的變更,或在 machine.config 檔案中進行適用於整個電腦的變更。電腦設定位於 %WINDIR% (您的 Microsoft Windows 目錄) 下的 .NET Framework 安裝 machine.config 檔案中。在此,您可指定在 Run Time 選取的個別配置器集。
注意 如果您的 Web.config 檔案中目前沒有 <mobileControls> 區段,您可將這個區段加入至 <system.web> 項目內其他區段之中的任何位置。
典型 Web.config 檔案包含 <configuration> 區段,而這個區段包含下列區段:
- <system.web>。設定偵錯及自訂錯誤訊息的編譯 (Compilation) 資訊。同時設定驗證 (Authentication) 模式、應用程式層級追蹤記錄、工作階段 (Session) 狀態設定、檔案下載使用權限及應用程式層級全球化設定。此外,這個檔案指定裝置篩選條件。
- <appSettings>。指定使用者應用程式屬性設定的組態。
宣告配置器集
裝置配置器集本質上是 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
這個選擇性 (Optional) 屬性表示目前的裝置配置器集繼承自以指定名稱識別的另一裝置配置器集。父代 (Parent) 裝置配置器集可位於同一 Web.config 檔案的同一 <mobileControls> 區段中的任何位置,或可位於父代 Web.config 檔案中。 - predicateClass 和 predicateMethod
這些屬性指向用於評估配置器集是否適用於目前裝置所呼叫的靜態 (Static) 方法。這個方法接受 HttpContext 型別的單一參數,並且傳回用於指示配置器集是否適用的布林 (Boolean) 值。這個方法可使用提供的 HttpContext 物件的 Browser 屬性 (它傳回 MobileCapabilities 物件) 檢查目標裝置的功能。 - pageAdapter
識別裝置集的頁面配置器類別,這是實作 IPageAdapter 介面的型別。
如果 <device> 區段包含 inheritsFrom 屬性,您就不需要宣告 predicateClass、predicateMethod 或 pageAdapter 屬性。而是,您的裝置配置器集可從父代裝置配置器集定義繼承這些屬性。
注意 雖然這些屬性不是必需的,但是如果適合您的應用程式,您可定義這些屬性。
您可在配置器集內放置任何數目的 <control> 區段或項目 - 每個區段或項目都提供特定的控制項配置器對應 (實作 IControlAdapter 的類別)。<control> 項目具有兩個屬性:指定所對應控制項類別的 name 屬性,及指定控制項配置器類別的 adapter 屬性。
對應考量
雖然控制項與配置器之間有一對一對應,但是不需要針對所有的控制項/裝置組合來撰寫唯一控制項配置器類別。一般而言,如果新的行動控制項使用繼承 (Inheritance) 或直接撰寫,並且不需要自訂輸出,就不需要控制項配置器。請考量下列替代做法:
- 配置器或配置器集可套用至一般類型裝置。例如,所有的 HTML 3.2 裝置可具有同一裝置配置器集。然而,針對某些控制項,可能有更特定裝置的更特殊化裝置配置器;例如,您可能想要撰寫 Pocket PC 專用的 Calendar 控制項裝置配置器。
- 控制項配置器可能與控制項基底類別 (Base Class) 關聯,而不與個別控制項關聯。例如,單一配置器可能足以呈現繼承自 BaseValidator 類別的所有驗證程式控制項。
- 甚至可能撰寫不使用裝置配置器的全功能行動控制項。然而,建議開發人員在適當的位置撰寫裝置配置器,因為如果網頁上的任何單一控制項不使用裝置配置器,則會損失架構的大部份彈性。
- 延伸現有控制項所建立的新控制項 - 使用者控制項 (User Control)、複合控制項 (Composite Control) 及透過繼承建立和包含現有控制項的控制項 - 不需要裝置配置器,因為會使用被收納的控制項 (Contained Control) 的配置器。
瞭解裝置配置器的選擇程序
下列程序描述如何選擇網頁的裝置配置器集:
- ASP.NET 在 Web.config 中的 <device> 區段定義的裝置配置器集的集合中重複。首先重複最接近所要求網頁的 Web.config 檔案,然後重複組態階層架構中較高層的每個連續 Web.config 檔案;最後重複 Machine.config 檔案。
- 使用 predicateClass 和 predicateMethod 屬性評估每個裝置配置器集的關聯述詞。
- 每個述詞都使用提供的 HttpContext 物件來檢查目標裝置的裝置功能,並且傳回 true 或 false,指示裝置配置器是否適用。
- 任一述詞傳回 true,就立即考慮選取該裝置配置器集。此時,系統使用 <device> 項目的 pageAdapter 屬性來決定要建立執行個體及建立配置器的類別。
- 如果 Web.config 中的述詞都不是傳回 true,則會針對父目錄的 Web.config 檔案中的裝置配置器集重複處理程序。
針對每個控制項,呼叫網頁來提供指定控制項型別的裝置配置器。ASP.NET 使用下列步驟來選擇適當的控制項配置器:
使用的裝置配置器集是為網頁的裝置配置器選擇的同一裝置配置器集。
如果裝置配置器集包含將控制項類別直接對應至裝置配置器類別的 <control> 項目,則會建立指定配置器類別的執行個體。
如果無法直接對應裝置配置器集,則會建立控制項基底類別的新執行個體。
重複這項處理程序,直到到達 Control 基底類別。
任何時間,如果找到直接對應,則會建立指定裝置配置器類別的新執行個體。
如果仍然未找到對應,並且裝置配置器集繼承自另一配置器集,則會針對父代配置器集重複配置器選擇步驟。往配置器集階層架構高層繼續,直到找到對應。
快取查閱結果,因此第一相關控制項的指定查詢只需要執行一次。保留前面說明的行為。