Condividi tramite


Mapping degli adattatori

Aggiornamento: novembre 2007

Un adattatore consente di definire un insieme di caratteristiche per uno specifico dispositivo richiedente. Si supponga di progettare un nuovo dispositivo basato sul progetto Palm Pilot di un palmare e di voler apportare modifiche e miglioramenti all'hardware. Per sviluppare pagine Web ASP.NET per dispositivi mobili per il nuovo dispositivo, è necessario avvalersi di un adattatore di dispositivo personalizzato che consenta di sfruttare appieno l'insieme di funzionalità dell'hardware potenziato.

Nel file Web.config, è necessario mappare ogni controllo mobile all'adattatore personalizzato creato per esso. Oltre a poter indicare singoli set di adattatori di dispositivo per una personalizzazione basata sul dispositivo, è anche possibile eseguire un'ulteriore personalizzazione ereditando un set di adattatori di dispositivo da un altro set e personalizzando quindi il comportamento di determinate combinazioni di controllo/dispositivo.

Nel file Web.config

Per mappare i controlli mobili e gli adattatori di dispositivo, occorre configurarli in modo dichiarativo nella sezione <mobileControls> dell'elemento <system.web>. Queste operazioni possono essere eseguite nel file Web.config per le modifiche da isolare per l'applicazione specifica. Le impostazioni che si riflettono sul server sono contenute nel file Machine.config dell'installazione di .NET Framework nella directory di Microsoft Windows. Nei file di configurazione è possibile specificare i singoli set di adattatori che verranno scelti in fase di esecuzione.

Nota:

Se attualmente nel file Web.config non esiste una sezione <mobileControls>, è possibile aggiungerne una in qualsiasi punto come oggetto figlio dell'elemento <system.web>.

Dichiarazione di un set di adattatori

Un set di adattatori di dispositivo è il meccanismo di mapping interno al file Web.config. Per ogni controllo in cui viene utilizzato un adattatore di dispositivo personalizzato, è necessario includere le seguenti informazioni nel set di adattatori di dispositivo:

  • una classe di predicati

  • un metodo di predicato

  • un adattatore di pagina

  • il nome del controllo e l'adattatore di dispositivo associato

Per aggiungere un set di adattatori di dispositivo al file Web.config dell'applicazione, è necessario dichiararlo utilizzando un elemento <device> nella sezione <mobileControls> del file, come illustrato nell'esempio di codice riportato di seguito.

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

Definizione degli attributi di dispositivo

Come descritto nell'esempio di codice precedente è necessario includere in ogni set di adattatori gli attributi definiti nella tabella riportata di seguito.

Termine

Definizione

name

Identifica in modo univoco il set di adattatori di dispositivo.

InheritsFrom

(Facoltativo) Indica che il set di adattatori di dispositivo corrente eredita da un altro set, identificato dal nome. Il set di adattatori di dispositivo padre può risiedere in qualsiasi punto della stessa sezione <mobileControls> del file Web.config in questione o in un file Web.config padre.

PredicateClasse PredicateMethod

Puntano a un metodo statico chiamato per valutare se il set di adattatori è appropriato per il dispositivo corrente. Il metodo accetta un solo parametro di tipo HttpContext e restituisce un valore booleano che indica se il set di adattatori è valido. Può inoltre esaminare le funzionalità del dispositivo di destinazione utilizzando la proprietà Browser dell'oggetto HttpContext fornito, che restituisce un oggetto MobileCapabilities.

PageAdapter

Identifica la classe di adattatori di pagina per il set di dispositivi, un tipo che implementa l'interfaccia IPageAdapter.

Se in una sezione <device> è incluso l'attributo InheritsFrom, non è necessario dichiarare l'attributo PredicateClass, PredicateMethod o PageAdapter. Il set di adattatori di dispositivo è in grado di ereditare questi attributi dalla definizione del set di adattatori di dispositivo padre.

Nota:

Sebbene tali attributi non siano obbligatori, è possibile definirli se l'operazione è utile per l'applicazione.

In un set di adattatori è possibile inserire un numero illimitato di elementi <control>. Ciascuno fornisce un mapping a un adattatore di controllo specifico, ovvero una classe che implementa l'interfaccia IControlAdapter. Un elemento <control> ha due attributi: un attributo name che specifica la classe del controllo da mappare e un attributo adapter che specifica la classe dell'adattatore di controllo.

Considerazioni sul mapping

Sebbene tra un controllo e un adattatore esista un mapping uno a uno, non è necessario scrivere una classe di adattatori di controllo separata per ogni combinazione di controllo/dispositivo. In generale, se un nuovo controllo mobile utilizza l'ereditarietà o la composizione semplice e non richiede un output personalizzato, non è necessario un adattatore di controllo. Prendere in considerazione le seguenti alternative:

  • Un adattatore o un set di adattatori potrebbe applicarsi a un tipo generico di dispositivo. Per tutti i dispositivi HTML 3.2 potrebbe, ad esempio, essere previsto lo stesso set di adattatori di dispositivo. Per alcuni controlli tuttavia potrebbero essere necessari adattatori di dispositivo più specializzati per dispositivi più specifici. È possibile ad esempio scrivere un adattatore di dispositivo di controllo Calendar specifico per Pocket PC.

  • Un adattatore del controllo può essere associato a una classe base di controlli, invece che a singoli controlli. Un singolo adattatore può ad esempio essere sufficiente per eseguire il rendering di tutti i controlli di convalida che ereditano dalla classe BaseValidator.

  • È possibile creare controlli mobili completamente funzionali che non utilizzano adattatori di dispositivo. Tuttavia, si consiglia agli sviluppatori di scrivere adattatori di dispositivo nei casi in cui sia appropriato, poiché se i singoli controlli presenti sulla pagina non utilizzano adattatori di dispositivo si perde la maggior parte delle flessibilità dell'architettura.

  • I nuovi controlli creati estendendo quelli esistenti, ad esempio controlli utente, controlli compositi e controlli creati mediante ereditarietà contenenti controlli esistenti, non necessitano di adattatori di dispositivo, poiché vengono utilizzati gli adattatori di controllo in essi contenuti.

Informazioni sul processo di selezione degli adattatori di dispositivo

Nel processo riportato di seguito viene descritta la modalità di selezione di un adattatore di dispositivo per una pagina:

  1. ASP.NET scorre l'insieme di set di adattatori di dispositivo, come definito dalle sezioni <device> nel file Web.config. Il file Web.config più vicino alla pagina richiesta viene esaminato per primo, seguito da ciascun file Web.config successivo posizionato in un livello superiore nella gerarchia di configurazione. L'ultimo sarà il file Machine.config.

  2. Il predicato associato per ogni set di adattatori di dispositivo viene valutato utilizzando gli attributi predicateClass e predicateMethod.

  3. Ogni predicato utilizza l'oggetto HttpContext fornito per esaminare le funzionalità del dispositivo di destinazione e restituisce true o false a indicare se i set di adattatori di dispositivo sono applicabili.

  4. Nel momento in cui un predicato restituisce true, il set di adattatori di dispositivo in questione viene considerato selezionato. A questo punto, viene utilizzato l'attributo pageAdapter dell'elemento <device> per determinare di quale classe creare un'istanza per la creazione dell'adattatore.

  5. Se nessuno dei predicati del file Web.config restituisce true, il processo viene ripetuto per i set di adattatori di dispositivo del file Web.config della directory padre.

Per ciascun controllo, è necessario che la pagina fornisca un adattatore di dispositivo al tipo di controllo specificato. In ASP.NET vengono effettuati i seguenti passaggi per scegliere l'adattatore del controllo appropriato:

  1. Il set di adattatori di dispositivo utilizzato è quello scelto per l'adattatore di dispositivo della pagina.

  2. Se nel set di adattatori di dispositivo è presente un elemento <control> che mappa direttamente la classe del controllo a una classe di adattatori di dispositivo, viene creata un'istanza della classe di adattatori specificata.

  3. Se il set di adattatori di dispositivo non può essere mappato in modo diretto, viene creata una nuova istanza della classe base del controllo.

    Il processo viene ripetuto fino a quando non si raggiunge la classe base Control. Se in qualsiasi momento viene individuato un mapping diretto, viene creata una nuova istanza della classe di adattatori di dispositivo specificata.

  4. Se non è stato ancora individuato alcun mapping e il set di adattatori di dispositivo eredita da un altro set di adattatori, i passaggi per la selezione dell'adattatore vengono ripetuti per il set di adattatori padre. Si risale quindi la gerarchia dei set di adattatori fino a quando non si individua un mapping.

Poiché i risultati della ricerca vengono inseriti nella cache, la ricerca specificata deve essere eseguita solo per il primo controllo interessato. Il comportamento descritto in precedenza viene conservato.

Vedere anche

Altre risorse

Aggiunta di nuovi adattatori di dispositivo e supporto per dispositivi