La Universal Windows Platform introduce il concetto di "codice adattivo", ovvero la capacità che ha il nostro codice di determinare a runtime la presenza di eventi, classi e metodi in base al device o piattaforma su cui la nostra applicazione è in esecuzione.
Queste potenti funzionalità di feature detection possono essere sfruttate utilizzando i metodi statici esposti dalla classe ApiInformation contenuta nel namespace Windows.Foundation.Metadata.
Di seguito vediamo degli esempi di utilizzo di alcuni dei metodi esposti dalla classe ApiInformation.
Controllare la presenza di una classe
Per controllare l'esistenza di una classe è necessario utilizzare il metodo IsTypePresent che prende in input il fullname della classe di cui vogliamo verificare l'esistenza, e ha come output un booleano che indica il risultato della richiesta.
var type = typeof(Windows.Devices.Geolocation.Geolocator).FullName;
if(Windows.Foundation.Metadata.ApiInformation.IsTypePresent(type))
{
// Do stuff with Geolocator
}Controllare la presenza di un evento
Per verificare se un evento esiste o meno all'interno di una classe è necessario utilizzare il metodo IsEventPresent. Come nel caso precedente anche qua passiamo in input il fullname della classe, aggiungendo però come secondo parametro il nome dell'evento di cui vogliamo verificare l'esistenza.
var type = typeof(Windows.Devices.Geolocation.Geolocator).FullName;
if(Windows.Foundation.Metadata.ApiInformation.IsEventPresent(type, "PositionChanged"))
{
// Subscribe to event
}Controllare l'esistenza di un metodo
Qualora volessimo controllare l'esistenza di un metodo ci è sufficiente utilizzare il metodo IsMethodPresent. Come nel caso precedente dobbiamo passare in input la classe da interrogare e il nome del metodo. La funzione IsMethodPresent, tuttavia, ha una particolarità che permette di individuare in maniera più puntuale il metodo che ci interessa, infatti tramite un overload è persino possibile specificare il numero di parametri che tale metodo dovrebbe avere.
var type = typeof(Windows.Devices.Geolocation.Geolocator).FullName;
if (Windows.Foundation.Metadata.ApiInformation.IsMethodPresent(type,"GetGeopositionAsync"))
{
// Get method disregarding its number of parameters
}
var type = typeof(Windows.Devices.Geolocation.Geolocator).FullName;
if (Windows.Foundation.Metadata.ApiInformation.IsMethodPresent(type, "GetGeopositionAsync", 2))
{
// GetGeopositionAsync must have 2 input params
}Controllare la presenza di un ApiContract
Per ApiContract intendiamo un insieme di classi, interfacce, enumerazioni e strutture che sono logicamente raggruppate tra loro poiché, nel complesso, concorrono tutte a fornire un determinato tipo di funzionalità.
In Windows 10 ogni API fa parte di un Contract e la lista completa può essere consultata a questo indirizzo http://aspit.co/a63 . Per verificare l'esistenza di un particolare ApiContract utilizziamo il metodo IsApiContractPresent.
var type = typeof(Windows.Foundation.UniversalApiContract).FullName;
if (Windows.Foundation.Metadata.ApiInformation.IsApiContractPresent(type, 1))
{
// APIs available
}Anche questo metodo ha a disposizione due overload. Il primo (quello predefinito) prende come input il fullname dell'ApiContract e la major version del contratto. Il secondo, oltre ai due parametri precedentemente descritti, richiede anche la minor version. Questa granularità nel controllo ci permette di selezionare accuratamente il set di API a cui vogliamo far riferimento, evitandoci spiacevoli inconvenienti qualora, a seguito di una nuova major release dell'OS, le API da noi utilizzate dovessero subire dei cambiamenti.
Conclusioni
Nello script di questa settimana abbiamo descritto brevemente alcune delle funzionalità di feature detection disponibili nella Universal Windows Platform, mostrando come sia più immediato e semplice questo tipo di approccio rispetto a quello classico basato sulla versione del sistema operativo.
Per una lista di tutti i metodi esposti dalla classe ApiInformation possiamo fare riferimento alla documentazione ufficiale su MSDN alla pagina http://aspit.co/a64 .
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare l nesting nativo dei CSS
Gestione degli eventi nei Web component HTML
Personalizzare le pagine di errore su Azure App Service
Controllare la telemetria con .NET Aspire
Abilitare il rolling update su Azure Functions flex consumption
Proteggere l'endpoint dell'agente A2A delle Logic App
Ottimizzare le performance usando Span<T> e il metodo Split
Utilizzare DeepSeek R1 con Azure AI
Analizzare il contenuto di una issue con GitHub Models e AI
Recuperare gli audit log in Azure DevOps
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Ridurre il reflow cambiando il CSS
I più letti di oggi
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Sfruttare una CDN con i bundle di ASP.NET


