Xamarin.Forms Wprowadzenie do usługi DependencyService
Klasa DependencyService
to lokalizator usług, który umożliwia Xamarin.Forms aplikacjom wywoływanie natywnych funkcji platformy z kodu udostępnionego.
Proces używania elementu DependencyService
do wywoływania natywnej funkcjonalności platformy to:
- Utwórz interfejs dla funkcji platformy natywnej w kodzie udostępnionym. Aby uzyskać więcej informacji, zobacz Tworzenie interfejsu.
- Zaimplementuj interfejs w wymaganych projektach platformy. Aby uzyskać więcej informacji, zobacz Implementowanie interfejsu na każdej platformie.
- Zarejestruj implementacje platformy za pomocą polecenia
DependencyService
. Umożliwia Xamarin.Forms to zlokalizowanie implementacji platformy w czasie wykonywania. Aby uzyskać więcej informacji, zobacz Rejestrowanie implementacji platformy. - Rozwiąż implementacje platformy z kodu udostępnionego i wywołaj je. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z implementacjami platformy.
Na poniższym diagramie pokazano, jak funkcja natywnej Xamarin.Forms platformy jest wywoływana w aplikacji:
Tworzenie interfejsu
Pierwszym krokiem w celu wywołania natywnej funkcjonalności platformy z kodu udostępnionego jest utworzenie interfejsu definiującego interfejs API do interakcji z natywną funkcjonalnością platformy. Ten interfejs powinien zostać umieszczony w projekcie kodu udostępnionego.
Poniższy przykład przedstawia interfejs interfejsu API, który może służyć do pobierania orientacji urządzenia:
public interface IDeviceOrientationService
{
DeviceOrientation GetOrientation();
}
Implementowanie interfejsu na każdej platformie
Po utworzeniu interfejsu definiującego interfejs API do interakcji z natywną funkcjonalnością platformy interfejs musi zostać zaimplementowany w każdym projekcie platformy.
iOS
Poniższy przykład kodu przedstawia implementację interfejsu IDeviceOrientationService
w systemie 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
Poniższy przykład kodu przedstawia implementację interfejsu IDeviceOrientationService
w systemie 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;
}
}
}
Platforma uniwersalna systemu Windows
Poniższy przykład kodu przedstawia implementację interfejsu IDeviceOrientationService
na platformie platforma uniwersalna systemu Windows (UWP):
namespace DependencyServiceDemos.UWP
{
public class DeviceOrientationService : IDeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
ApplicationViewOrientation orientation = ApplicationView.GetForCurrentView().Orientation;
return orientation == ApplicationViewOrientation.Landscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
}
}
}
Rejestrowanie implementacji platformy
Po zaimplementowaniu interfejsu w każdym projekcie platformy implementacje platformy muszą być zarejestrowane w DependencyService
obiekcie , aby Xamarin.Forms można je było zlokalizować w czasie wykonywania. Jest to zwykle wykonywane z elementem DependencyAttribute
, który wskazuje, że określony typ zapewnia implementację interfejsu.
W poniższym przykładzie pokazano użycie elementu DependencyAttribute
, aby zarejestrować implementację interfejsu dla IDeviceOrientationService
systemu iOS:
using Xamarin.Forms;
[assembly: Dependency(typeof(DependencyServiceDemos.iOS.DeviceOrientationService))]
namespace DependencyServiceDemos.iOS
{
public class DeviceOrientationService : IDeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
...
}
}
}
W tym przykładzie element rejestruje element DependencyAttribute
DeviceOrientationService
za pomocą elementu DependencyService
. Podobnie implementacje interfejsu IDeviceOrientationService
na innych platformach powinny być zarejestrowane w programie DependencyAttribute
.
Aby uzyskać więcej informacji na temat rejestrowania implementacji platformy w programie , zobaczXamarin.Forms DependencyService Registration and Resolution (Rejestracja i rozwiązywanie problemów z usługą DependencyService
DependencyService).
Rozwiązywanie problemów z implementacjami platformy
Po zarejestrowaniu implementacji platformy za DependencyService
pomocą polecenia należy rozwiązać implementacje przed wywołaniem. Jest to zwykle wykonywane w kodzie udostępnionym DependencyService.Get<T>
przy użyciu metody .
Poniższy kod przedstawia przykład wywołania Get<T>
metody w celu rozpoznania interfejsu IDeviceOrientationService
, a następnie wywołania jej GetOrientation
metody:
IDeviceOrientationService service = DependencyService.Get<IDeviceOrientationService>();
DeviceOrientation orientation = service.GetOrientation();
Alternatywnie ten kod można skondensować w jednym wierszu:
DeviceOrientation orientation = DependencyService.Get<IDeviceOrientationService>().GetOrientation();
Aby uzyskać więcej informacji na temat rozwiązywania implementacji platformy za pomocą programu DependencyService
, zobacz Xamarin.Forms DependencyService Registration and Resolution (Rejestracja i rozwiązywanie problemów z usługą DependencyService).