次の方法で共有


アダプタのマッピング

更新 : 2007 年 11 月

アダプタは、個々の要求元デバイスの特性セットを定義します。たとえば、Palm Pilot をベースとした新しいデバイスを設計していて、ハードウェアの修正と拡張を行うとします。新しいデバイスに対応した ASP.NET モバイル Web ページを開発するには、ハードウェアの拡張機能セットを十分に活用するための、カスタマイズされたデバイス アダプタが必要です。

Web.config ファイル内では、あらかじめ作成したカスタマイズされたアダプタに、各モバイル コントロールをマップします。デバイス固有のカスタマイズに対してデバイス アダプタのセットを個別に指定できるだけでなく、あるデバイス アダプタのセットを別のセットから継承し、特定のデバイスとコントロールの組み合わせに対する動作をカスタマイズすることもできます。

Web.config ファイル内部

モバイル コントロールとデバイス アダプタをマッピングするには、<system.web> 要素の <mobileControls> セクションでそれらを宣言して構成します。変更を特定のアプリケーションに限定する場合は Web.config ファイルで宣言できます。サーバー全体の設定は、Microsoft Windows ディレクトリの下の .NET Framework をインストールした場所にある Machine.config ファイルにあります。この構成ファイルでは、実行時に選択されるアダプタ セットを個別に指定できます。

w5b9y36y.alert_note(ja-jp,VS.90).gifメモ :

<mobileControls> セクションが現在の Web.config ファイルに存在しない場合は、<system.web> 要素の子要素として任意の場所に追加できます。

アダプタ セットの宣言

デバイス アダプタ セットは、Web.config ファイル内部のマッピング メカニズムです。カスタマイズされたデバイス アダプタを使用する各コントロールでは、以下の情報をデバイス アダプタ セット内部に追加する必要があります。

  • 述語クラス

  • 述語メソッド

  • ページ アダプタ

  • コントロールの名前および関連付けられたデバイス アダプタ

デバイス アダプタ セットをアプリケーションの 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>

デバイス属性の定義

前のコード例に示したように、以下の一覧に示す属性を各アダプタ セットに追加する必要があります。

用語

定義

name

デバイス アダプタ セットを一意に認識します。

InheritsFrom

(省略可能) 名前によって識別される他のデバイス アダプタ セットから、現在のデバイス アダプタ セットが継承されていることを示します。親のデバイス アダプタ セットは、同じ Web.config ファイルにある同じ <mobileControls> セクションの任意の場所に配置することも、親の Web.config ファイル内に配置することもできます。

PredicateClassおよびPredicateMethod

アダプタ セットが現在のデバイスに対して適切であるかどうかを評価するために呼び出される静的メソッドを指しています。このメソッドは、HttpContext 型の単一のパラメータを使用し、アダプタ セットが適合するかどうかを示すブール値を返します。このメソッドは、MobileCapabilities オブジェクトを返す、指定された HttpContext オブジェクトの Browser プロパティを使用して対象デバイスの機能を調べます。

PageAdapter

IPageAdapter インターフェイスを実装する型である、デバイス セットのページ アダプタ クラスを識別します。

<device> セクションに InheritsFrom 属性が含まれている場合、PredicateClassPredicateMethodPageAdapter の各属性を宣言する必要はありません。その代わり、デバイス アダプタ セットはこれらの属性を親のデバイス アダプタ セットの定義から継承することができます。

w5b9y36y.alert_note(ja-jp,VS.90).gifメモ :

これらの属性は必須ではありませんが、アプリケーションにとって使用すると有効な場合に定義できます。

アダプタ セットの内部には <control> 要素をいくつでも配置できます。それぞれが、特定のコントロール アダプタ マッピング (IControlAdapter を実装するクラス) を提供します。<control> 要素には 2 つの属性があります。1 つはマップされるコントロールのクラスを指定する name 属性であり、もう 1 つはコントロール アダプタのクラスを指定する adapter 属性です。

マッピングに関する考慮事項

コントロールとアダプタは一対一でマッピングされていますが、コントロールとデバイスの組み合わせごとに別のコントロール アダプタ クラスを記述する必要はありません。通常、新しいモバイル コントロールが継承または単純な合成を使用し、カスタマイズされた出力が必要ない場合は、コントロール アダプタを必要としません。以下の代替手段を検討してください。

  • アダプタまたはアダプタのセットは、一般的な種類のデバイスに適用できることがあります。たとえば、すべての HTML 3.2 デバイスは、同じデバイス アダプタのセットを持っていることがあります。ただし、一部のコントロールでは、デバイスに特化されたデバイス アダプタが存在することがあります。たとえば、Pocket PC に特化した Calendar コントロールのデバイス アダプタを記述する場合などがあります。

  • コントロール アダプタは、個々のコントロールではなく、コントロールの基本クラスに関連付けられていることがあります。たとえば、BaseValidator クラスから継承しているすべての検証コントロールをレンダリングするのに、1 つのアダプタで十分な場合があります。

  • デバイス アダプタを使用しない、完全に機能するモバイル コントロールを記述できます。ただし、開発者は必要な場合にだけデバイス アダプタを記述することを強くお勧めします。これは、ページのどのコントロールもデバイス アダプタを使用しない場合、アーキテクチャの柔軟性が大きく損なわれるためです。

  • 既存のコントロールを拡張して作成された新しいコントロールには、ユーザー コントロール、複合コントロール、および継承を通じて作成された既存のコントロールを含むコントロールがあります。これらのコントロールでは、含まれているコントロールのアダプタが使用されるため、デバイス アダプタは必要ありません。

デバイス アダプタの選択プロセスの理解

ここでは、ページのデバイス アダプタ セットの選択手順について説明します。

  1. ASP.NET は、Web.config ファイルの <device> セクションの定義に従って、デバイス アダプタ セットのコレクションを反復処理します。要求されたページに最も近い Web.config ファイルが最初に処理され、次に構成の階層の上にある Web.config ファイルから順に処理されます。最後に Machine.config ファイルが処理されます。

  2. 各デバイス アダプタ セットの関連付けられた述語が、predicateClass 属性および predicateMethod 属性を使用して評価されます。

  3. 各述語は、指定された HttpContext オブジェクトを使用して、対象デバイスのデバイス機能を調べ、デバイス アダプタ セットが利用可能かどうかを示す true または false を返します。

  4. いずれかの述語が true を返すと、そのデバイス アダプタ セットは選択されたものと見なされます。この時点で、システムは <device> 要素の pageAdapter 属性を使用して、アダプタを作成するためのインスタンスを作成するクラスを決定します。

  5. Web.config ファイルの述語がいずれも true を返さない場合は、親ディレクトリの Web.config ファイルにあるデバイス アダプタ セットに対してプロセスが繰り返されます。

各コントロールに対しては、ページが呼び出され、指定されたコントロールの型のデバイス アダプタが提供されます。ASP.NET は、以下の手順に従って適切なコントロール アダプタを選択します。

  1. 使用されるデバイス アダプタ セットは、ページのデバイス アダプタに対して選択されたものと同じです。

  2. コントロール クラスをデバイス アダプタ クラスに直接マップする <control> 要素がデバイス アダプタのセットに含まれている場合は、指定されたアダプタ クラスのインスタンスが作成されます。

  3. デバイス アダプタ セットを直接マップできない場合は、コントロールの基本クラスの新しいインスタンスが作成されます。

    Control 基本クラスに到達するまで、このプロセスが繰り返されます。直接のマッピングが見つかった時点で、指定されたデバイス アダプタ クラスの新しいインスタンスが作成されます。

  4. マッピングが依然として見つからず、デバイス アダプタ セットが他のアダプタ セットから継承している場合は、親のアダプタ セットに対してアダプタ選択手順が繰り返されます。この処理は、マッピングが見つかるまで、アダプタのセットの階層を上に向かって継続されます。

検索の結果はキャッシュされるため、指定された検索は、最初の該当するコントロールに対して一度だけ実行する必要があります。上記の動作は維持されます。

参照

その他の技術情報

新しいデバイス アダプタおよびデバイス サポートの追加