Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 DependencyServiceobiekcie , 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ą DependencyServiceDependencyService).
Rozwiązywanie problemów z implementacjami platformy
Po zarejestrowaniu implementacji platformy za DependencyServicepomocą 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).