Partager via


Résumé du chapitre 9. Appels d’API spécifiques de la plateforme

Remarque

Ce livre a été publié au printemps 2016 et n’a pas été mis à jour depuis. Il y a beaucoup dans le livre qui reste précieux, mais certains documents sont obsolètes, et certains sujets ne sont plus entièrement corrects ou complets.

Il est parfois nécessaire d’exécuter du code qui varie selon la plateforme. Ce chapitre explore les techniques.

Prétraitement dans le projet de ressource partagée

Un Xamarin.Forms projet de ressource partagée peut exécuter du code différent pour chaque plateforme à l’aide des directives #ifde préprocesseur C# , #elifet endif. Ceci est illustré dans PlatInfoSap1 :

Triple capture d’écran du paragraphe mis en forme variable

Toutefois, le code résultant peut être laid et difficile à lire.

Classes parallèles dans le projet de ressource partagée

Une approche plus structurée de l’exécution de code spécifique à la plateforme dans SAP est illustrée dans l’exemple PlatInfoSap2 . Chacun des projets de plateforme contient une classe et des méthodes nommées identiquement, mais implémentées pour cette plateforme particulière. Sap instancie ensuite simplement la classe et appelle la méthode.

DependencyService et la bibliothèque de classes portables

Remarque

Les bibliothèques de classes portables ont été remplacées par des bibliothèques .NET Standard. Tous les exemples de code du livre ont été convertis pour utiliser des bibliothèques .NET standard.

Une bibliothèque ne peut normalement pas accéder aux classes dans les projets d’application. Cette restriction semble empêcher l’utilisation de la technique indiquée dans PlatInfoSap2 dans une bibliothèque. Toutefois, Xamarin.Forms contient une classe nommée DependencyService qui utilise la réflexion .NET pour accéder aux classes publiques dans le projet d’application à partir de la bibliothèque.

La bibliothèque doit définir un interface avec les membres qu’il doit utiliser dans chaque plateforme. Ensuite, chacune des plateformes contient une implémentation de cette interface. La classe qui implémente l’interface doit être identifiée avec un DependencyAttribute au niveau de l’assembly.

La bibliothèque utilise ensuite la méthode générique Get permettant DependencyService d’obtenir une instance de la classe de plateforme qui implémente l’interface.

Ceci est illustré dans l’exemple DisplayPlatformInfo .

Génération de son spécifique à la plateforme

L’exemple MonkeyTapWithSound ajoute des bips au programme MonkeyTap en accédant aux installations de génération sonore dans chaque plateforme.