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 à :
- 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.
- Implémenter l’interface dans les projets de plateforme nécessaires. Pour plus d’informations, consultez Implémenter l’interface sur chaque plateforme.
- 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. - 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 :
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 DependencyService
dependencyService 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 DependencyService
DependencyService Xamarin.Forms Registration and Resolution.