Xamarin.Forms Présentation de DependencyService

Télécharger l’exemple Télécharger l’exemple

La DependencyService classe est un localisateur de service qui permet aux applications d’appeler des Xamarin.Forms fonctionnalités de plateforme natives à partir de code partagé.

Le processus d’utilisation de DependencyService pour appeler les fonctionnalités natives d’une plateforme consiste à :

  1. Créer une interface pour les fonctionnalités natives de la plateforme dans du code partagé. Pour plus d’informations, consultez Créer une interface.
  2. Implémenter l’interface dans les projets de plateforme nécessaires. Pour plus d’informations, consultez Implémenter l’interface sur chaque plateforme.
  3. Inscrire les implémentations de plateforme auprès de DependencyService. Cela permet de localiser les implémentations Xamarin.Forms de plateforme au moment de l’exécution. Pour plus d’informations, consultez Inscrire les implémentations de plateforme.
  4. Résoudre les implémentations de plateforme à partir du code partagé et les appeler. Pour plus d’informations, consultez Résoudre les implémentations de plateforme.

Le diagramme suivant montre comment la fonctionnalité de plateforme native est appelée dans une Xamarin.Forms application :

Vue d’ensemble de l’emplacement du service à l’aide de Xamarin.Forms Emplacement du service DependencyService, classe

Créer une interface

La première étape pour pouvoir appeler des fonctionnalités natives d’une plateforme depuis du code partagé est de créer une interface qui définit l’API pour interagir avec ces fonctionnalités. Cette interface doit être placée dans votre projet de code partagé.

L’exemple suivant montre une interface pour une API qui peut être utilisée pour récupérer l’orientation d’un appareil :

public interface IDeviceOrientationService
{
    DeviceOrientation GetOrientation();
}

Implémenter l’interface sur chaque plateforme

Une fois que vous avez créé l’interface qui définit l’API permettant d’interagir avec les fonctionnalités natives d’une plateforme, vous devez implémenter cette interface dans chaque projet de plateforme.

iOS

L’exemple de code suivant montre l’implémentation de l’interface IDeviceOrientationService sur iOS :

namespace DependencyServiceDemos.iOS
{
    public class DeviceOrientationService : IDeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
            UIInterfaceOrientation orientation = UIApplication.SharedApplication.StatusBarOrientation;

            bool isPortrait = orientation == UIInterfaceOrientation.Portrait ||
                orientation == UIInterfaceOrientation.PortraitUpsideDown;
            return isPortrait ? DeviceOrientation.Portrait : DeviceOrientation.Landscape;
        }
    }
}

Android

L’exemple de code suivant montre l’implémentation de l’interface IDeviceOrientationService sur Android :

namespace DependencyServiceDemos.Droid
{
    public class DeviceOrientationService : IDeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
            IWindowManager windowManager = Android.App.Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();

            SurfaceOrientation orientation = windowManager.DefaultDisplay.Rotation;
            bool isLandscape = orientation == SurfaceOrientation.Rotation90 ||
                orientation == SurfaceOrientation.Rotation270;
            return isLandscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
        }
    }
}

Plateforme Windows universelle

L’exemple de code suivant montre l’implémentation de IDeviceOrientationService sur la plateforme Windows universelle (UWP) :

namespace DependencyServiceDemos.UWP
{
    public class DeviceOrientationService : IDeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
            ApplicationViewOrientation orientation = ApplicationView.GetForCurrentView().Orientation;
            return orientation == ApplicationViewOrientation.Landscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
        }
    }
}

Inscrire les implémentations de plateforme

Après avoir implémenté l’interface dans chaque projet de plateforme, les implémentations de plateforme doivent être inscrites auprès du DependencyService, afin de Xamarin.Forms pouvoir les localiser au moment de l’exécution. Cette opération est généralement effectuée avec DependencyAttribute, qui indique que le type spécifié fournit une implémentation de l’interface.

L’exemple suivant montre l’utilisation de DependencyAttribute pour inscrire l’implémentation iOS de l’interface IDeviceOrientationService :

using Xamarin.Forms;

[assembly: Dependency(typeof(DependencyServiceDemos.iOS.DeviceOrientationService))]
namespace DependencyServiceDemos.iOS
{
    public class DeviceOrientationService : IDeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
            ...
        }
    }
}

Dans cet exemple, DependencyAttribute inscrit DeviceOrientationService auprès de DependencyService. De même, les implémentations de l’interface IDeviceOrientationService sur d’autres plateformes doivent être inscrites avec DependencyAttribute.

Pour plus d’informations sur l’inscription des implémentations de plateforme auprès de DependencyService, consultez Xamarin.Forms DependencyService Registration and Resolution.

Résoudre les implémentations d’une plateforme

Après l’inscription des implémentations de plateforme auprès de DependencyService, les implémentations doivent être résolues avant d’être appelées. Cette opération est généralement effectuée dans du code partagé avec la méthode DependencyService.Get<T>.

Le code suivant montre un exemple d’appel de la méthode Get<T> pour résoudre l’interface IDeviceOrientationService, puis d’un appel de sa méthode GetOrientation :

IDeviceOrientationService service = DependencyService.Get<IDeviceOrientationService>();
DeviceOrientation orientation = service.GetOrientation();

Vous pouvez aussi condenser ce code sur une seule ligne :

DeviceOrientation orientation = DependencyService.Get<IDeviceOrientationService>().GetOrientation();

Pour plus d’informations sur la résolution des implémentations de plateforme avec , DependencyServiceconsultez Xamarin.Forms DependencyService Registration and Resolution.