Xamarin.Forms Introdução ao DependencyService
A DependencyService
classe é um localizador de serviço que permite Xamarin.Forms que os aplicativos invoquem a funcionalidade da plataforma nativa do código compartilhado.
O processo para usar o DependencyService
para invocar a funcionalidade de plataforma nativa é:
- Crie uma interface para a funcionalidade de plataforma nativa, em código compartilhado. Para obter mais informações, confira Criar uma interface.
- Implemente a interface nos projetos de plataforma necessários. Para obter mais informações, confira Implementar a interface em cada plataforma.
- Registrar as implementações de plataforma no
DependencyService
. Isso permite Xamarin.Forms localizar as implementações da plataforma em tempo de execução. Para obter mais informações, confira Registrar as implementações de plataforma. - Resolva as implementações de plataforma de um código compartilhado e as invoque. Para obter mais informações, confira Resolver as implementações de plataforma.
O diagrama a seguir mostra como a funcionalidade da plataforma nativa é invocada em um Xamarin.Forms aplicativo:
Criar uma interface
A primeira etapa em ser capaz de invocar a funcionalidade de plataforma nativa de um código compartilhado é criar uma interface que defina a API para interagir com a funcionalidade de plataforma nativa. Essa interface deve ser colocada em seu projeto de código compartilhado.
O exemplo a seguir mostra uma interface para uma API que pode ser usada para recuperar a orientação de um dispositivo:
public interface IDeviceOrientationService
{
DeviceOrientation GetOrientation();
}
Implementar a interface em cada plataforma
Depois de criar a interface que define a API para interagir com a funcionalidade de plataforma nativa, a interface deverá ser implementada em cada projeto de plataforma.
iOS
O exemplo de código a seguir mostra a implementação da interface IDeviceOrientationService
no 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
O exemplo de código a seguir mostra a implementação da interface IDeviceOrientationService
no 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;
}
}
}
Plataforma Universal do Windows
O exemplo de código a seguir mostra a implementação da interface IDeviceOrientationService
na UWP (Plataforma Universal do Windows):
namespace DependencyServiceDemos.UWP
{
public class DeviceOrientationService : IDeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
ApplicationViewOrientation orientation = ApplicationView.GetForCurrentView().Orientation;
return orientation == ApplicationViewOrientation.Landscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
}
}
}
Registrar as implementações de plataforma
Depois de implementar a interface em cada projeto de plataforma, as implementações da plataforma devem ser registradas com o DependencyService
, para que Xamarin.Forms possam localizá-las em tempo de execução. Isso normalmente é executado com o DependencyAttribute
, o que indica que o tipo especificado fornece uma implementação da interface.
O exemplo a seguir mostra o uso do DependencyAttribute
para registrar a implementação do iOS da interface IDeviceOrientationService
:
using Xamarin.Forms;
[assembly: Dependency(typeof(DependencyServiceDemos.iOS.DeviceOrientationService))]
namespace DependencyServiceDemos.iOS
{
public class DeviceOrientationService : IDeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
...
}
}
}
Neste exemplo, o DependencyAttribute
registra o DeviceOrientationService
com o DependencyService
. Da mesma forma, as implementações da interface IDeviceOrientationService
em outras plataformas devem ser registradas com o DependencyAttribute
.
Para obter mais informações sobre como registrar implementações de plataforma com o DependencyService
, consulte Xamarin.Forms Registro e resolução de DependencyService.
Resolver as implementações da plataforma
Após o registro das implementações de plataforma com o DependencyService
, as implementações deverão ser resolvidas antes de serem invocadas. Isso normalmente é feito no código compartilhado, usando o método DependencyService.Get<T>
.
O código a seguir mostra um exemplo de chamada ao método Get<T>
para resolver a interface IDeviceOrientationService
e, em seguida, invocação de seu método GetOrientation
:
IDeviceOrientationService service = DependencyService.Get<IDeviceOrientationService>();
DeviceOrientation orientation = service.GetOrientation();
Como alternativa, esse código pode ser condensado em uma única linha:
DeviceOrientation orientation = DependencyService.Get<IDeviceOrientationService>().GetOrientation();
Para obter mais informações sobre como resolver implementações de plataforma com o DependencyService
, consulte Xamarin.Forms Registro e resolução de DependencyService.