Adapterzuordnungen

Aktualisiert: November 2007

Ein Adapter definiert eine Gruppe von Eigenschaften für ein bestimmtes anforderndes Gerät. Angenommen, Sie entwerfen ein neues Gerät auf der Grundlage eines Palm Pilot und möchten Änderungen und Erweiterungen an der Hardware vornehmen. Zum Entwickeln von ASP.NET Mobile-Webseiten für das neue Gerät benötigen Sie einen angepassten Geräteadapter, damit Sie den vollen Featureumfang der erweiterten Hardware nutzen können.

Die einzelnen mobilen Steuerelemente werden dem dafür erstellten angepassten Adapter in der Datei Web.config zugeordnet. Sie können nicht nur einzelne Geräteadaptergruppen für die gerätespezifische Anpassung angeben, sondern Sie können weitere Anpassungen vornehmen, indem eine Geräteadaptergruppe von einer anderen erbt, wodurch das Verhalten für bestimmte Gerät-Steuerelement-Kombinationen angepasst wird.

Einblicke in die Datei Web.config

Zum Zuordnen von mobilen Steuerelementen und Geräteadaptern müssen diese im Abschnitt <mobileControls> des <system.web>-Elements deklarativ konfiguriert werden. Dies können Sie in der Datei Web.config vornehmen, damit Änderungen für die angegebene Anwendung isoliert werden. Serverweite Einstellungen für die .NET Framework-Installation befinden sich in der Datei Machine.config unter dem Microsoft Windows-Verzeichnis. In den Konfigurationsdateien können Sie die einzelnen Adaptergruppen angeben, die zur Laufzeit ausgewählt werden.

Hinweis:

Wenn in der Datei Web.config zurzeit kein <mobileControls>-Abschnitt vorhanden ist, können Sie ihn an beliebiger Stelle als untergeordnetes Element des <system.web>-Elements hinzufügen.

Deklarieren einer Adaptergruppe

Eine Geräteadaptergruppe ist der Zuordnungsmechanismus in der Datei Web.config. Für jedes Steuerelement, das einen benutzerdefinierten Geräteadapter verwendet, müssen Sie die folgenden Informationen in der Geräteadaptergruppe einschließen:

  • eine Prädikatsklasse

  • eine Prädikatsmethode

  • einen Seitenadapter

  • den Namen des Steuerelements und zugeordnete Geräteadapter

Um der Datei Web.config der Anwendung eine Geräteadaptergruppe hinzuzufügen, müssen Sie mithilfe eines <device>-Elements im <mobileControls>-Abschnitt der Datei Web.config eine Geräteadaptergruppe deklarieren, wie im folgenden Codebeispiel gezeigt.

<?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>

Definieren von Geräteattributen

Wie im vorherigen Codebeispiel gezeigt, müssen Sie die in der folgenden Tabelle definierten Attribute in jede Adaptergruppe einfügen.

Ausdruck

Definition

name

Identifiziert die Geräteadaptergruppe eindeutig.

InheritsFrom

(Optional) Gibt an, dass die aktuelle Geräteadaptergruppe von einer anderen Gruppe erbt, die über den Namen identifiziert wird. Die übergeordnete Geräteadaptergruppe kann sich an beliebiger Position in demselben <mobileControls>-Abschnitt dieser Web.config-Datei oder in einer übergeordneten Web.config-Datei befinden.

PredicateClassund PredicateMethod

Zeigen auf eine statische Methode, die aufgerufen wird, um die Eignung der Adaptergruppe für das aktuelle Gerät zu überprüfen. Die Methode akzeptiert einen einzigen Parameter vom Typ HttpContext und gibt einen booleschen Wert zurück, der angibt, ob die Adaptergruppe angewendet werden kann. Die Methode kann die Funktionen des Zielgeräts mithilfe der Browser-Eigenschaft des bereitgestellten HttpContext-Objekts überprüfen, das ein MobileCapabilities-Objekt zurückgibt.

PageAdapter

Identifiziert die Seitenadapterklasse für die Gerätegruppe, einen Typ, der die IPageAdapter-Schnittstelle implementiert.

Wenn ein <device>-Abschnitt das InheritsFrom-Attribut enthält, müssen Sie das PredicateClass-Attribut, das PredicateMethod-Attribut oder das PageAdapter-Attribut nicht deklarieren. Stattdessen kann die Geräteadaptergruppe diese von der Definition der übergeordneten Geräteadaptergruppe erben.

Hinweis:

Diese Attribute sind nicht erforderlich, können jedoch definiert werden, wenn dies für die Anwendung sinnvoll ist.

Sie können eine beliebige Anzahl von <control>-Elementen innerhalb einer Adaptergruppe platzieren. Jedes davon stellt eine bestimmte Steuerelementadapterzuordnung (eine Klasse, die IControlAdapter implementiert) bereit. Ein <control>-Element verfügt über zwei Attribute: ein name-Attribut, mit dem die Klasse des zuzuordnenden Steuerelements angegeben wird, und ein adapter-Attribut, das die Klasse des Steuerelementadapters angibt.

Zuordnungsaspekte

Obwohl eine 1:1-Zuordnung zwischen Steuerelement und Adapter vorliegt, muss keine separate Steuerelementadapterklasse für jede Steuerelement-Gerät-Kombination geschrieben werden. Wenn ein neues mobiles Steuerelement Vererbung oder einfache Zusammensetzung verwendet und keine angepasste Ausgabe erforderlich ist, wird im Allgemeinen kein Steuerelementadapter benötigt. Die folgenden Alternativen stehen zur Verfügung:

  • Ein Adapter bzw. eine Gruppe von Adaptern kann auf einen allgemeinen Gerätetyp angewendet werden. Beispielsweise können alle HTML 3.2-Geräte über dieselbe Gruppe von Geräteadaptern verfügen. Für einige Steuerelemente könnte es aber speziellere Geräteadapter für spezifischere Geräte geben. Sie möchten zum Beispiel einen Calendar-Steuerelementgeräteadapter speziell für den Pocket PC schreiben.

  • Ein Steuerelementadapter kann einer Steuerelementbasisklasse (anstelle von einzelnen Steuerelementen) zugeordnet werden. Ein einzelner Adapter kann beispielsweise ausreichen, um alle Validierungssteuerelemente wiederzugeben, die von der BaseValidator-Klasse erben.

  • Es ist möglich, vollständig funktionsfähige mobile Steuerelemente zu schreiben, die keine Geräteadapter verwenden. Es empfiehlt sich jedoch unbedingt, im Bedarfsfall Geräteadapter zu schreiben, da die Architektur einen Großteil ihrer Flexibilität einbüßt, wenn ein einzelnes Steuerelement auf der Seite keine Geräteadapter verwendet.

  • Für neue, aus vorhandenen Steuerelementen erstellte Steuerelemente (Benutzersteuerelemente, zusammengesetzte Steuerelemente und durch Vererbung erstellte Steuerelemente, die vorhandene Steuerelemente enthalten) sind keine Geräteadapter erforderlich, da die Adapter der enthaltenen Steuerelemente verwendet werden.

Ablauf des Auswahlprozesses für Geräteadapter

Mit dem folgenden Vorgang wird die Auswahl einer Geräteadaptergruppe für eine Seite beschrieben:

  1. ASP.NET durchläuft die Auflistung von Geräteadaptergruppen, wie durch <device>-Abschnitte in der Datei Web.config definiert. Die Web.config-Datei, die der angeforderten Seite am nächsten ist, wird zuerst untersucht, danach jede folgende Web.config-Datei, die höher in der Konfigurationshierarchie zu finden ist. Die Datei Machine.config wird zuletzt untersucht.

  2. Das zugeordnete Prädikat für jede Geräteadaptergruppe wird mit dem predicateClass-Attribut und dem predicateMethod-Attribut ausgewertet.

  3. Jedes Prädikat überprüft mithilfe des bereitgestellten HttpContext-Objekts die Gerätefunktionen des Zielgeräts und gibt true oder false zurück. Dieser Wert gibt an, ob die Geräteadaptergruppen angewendet werden können.

  4. Wenn ein Prädikat true zurückgibt, wird die betreffende Geräteadaptergruppe als ausgewählt behandelt. An diesem Punkt wird anhand des pageAdapter-Attributs des <device>-Elements bestimmt, von welcher Klasse eine Instanz erstellt wird, um den Adapter zu erstellen.

  5. Wenn keines der Prädikate in der Datei Web.config true zurückgibt, wird der Vorgang für die Geräteadaptergruppen in der Web.config-Datei des übergeordneten Verzeichnisses wiederholt.

Die Seite wird für jedes Steuerelement aufgerufen, um einen Geräteadapter für den angegebenen Steuerelementtyp bereitzustellen. Die folgenden Schritte werden in ASP.NET bei der Auswahl des entsprechenden Steuerelementadapters ausgeführt:

  1. Die verwendete Geräteadaptergruppe stimmt mit der für den Geräteadapter der Seite ausgewählten überein.

  2. Wenn die Geräteadaptergruppe ein <control>-Element enthält, das die Steuerelementklasse direkt einer Geräteadapterklasse zuordnet, wird eine Instanz der angegebenen Adapterklasse erstellt.

  3. Wenn die Geräteadaptergruppe nicht direkt zugeordnet werden kann, wird eine neue Instanz der Basisklasse für das Steuerelement erstellt.

    Dieser Prozess wird so oft wiederholt, bis die Basisklasse Control erreicht wird. Wenn zu einem beliebigen Zeitpunkt eine direkte Zuordnung gefunden wird, wird eine neue Instanz der angegebenen Geräteadapterklasse erstellt.

  4. Wenn immer noch keine Zuordnung gefunden wurde und die Geräteadaptergruppe von einer anderen Adaptergruppe erbt, werden die Schritte für die Adapterauswahl für die übergeordnete Adaptergruppe wiederholt. Dies wird über die Hierarchie der Adaptergruppen fortgesetzt, bis eine Zuordnung gefunden wird.

Die Suchergebnisse werden zwischengespeichert, sodass die angegebene Suche nur für das erste relevante Steuerelement einmal ausgeführt werden muss. Das oben beschriebene Verhalten wird beibehalten.

Siehe auch

Weitere Ressourcen

Hinzufügen neuer Geräteadapter und Gerätunterstützung