Partager via


Xamarin.Forms Présentation de DependencyService

La DependencyService classe est un localisateur de services qui permet Xamarin.Forms aux applications d’appeler la fonctionnalité de plateforme native à partir du 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 Xamarin.Forms de localiser les implémentations 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 la Xamarin.Forms classe DependencyService

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 la plateforme doivent être inscrites auprès de l’instance 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 d’implémentations de plateforme à l’aide de DependencyServicedependencyService Xamarin.Forms 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 l’application DependencyServiceDependencyService Xamarin.Forms Registration and Resolution.