Xamarin.Forms Úvod do služby DependencyService
Třída DependencyService
je lokátor služby, který umožňuje Xamarin.Forms aplikacím vyvolat nativní funkce platformy ze sdíleného kódu.
Proces použití DependencyService
funkce nativní platformy k vyvolání nativní platformy spočívá v následujících:
- Ve sdíleném kódu vytvořte rozhraní pro funkci nativní platformy. Další informace naleznete v tématu Vytvoření rozhraní.
- Implementujte rozhraní v požadovaných projektech platformy. Další informace najdete v tématu Implementace rozhraní na jednotlivých platformách.
- Zaregistrujte implementace platformy v nástroji
DependencyService
. To umožňuje Xamarin.Forms vyhledat implementace platformy za běhu. Další informace najdete v tématu Registrace implementací platformy. - Vyřešte implementace platformy ze sdíleného kódu a volejte je. Další informace najdete v tématu Řešení implementací platformy.
Následující diagram znázorňuje, jak se v aplikaci vyvolává Xamarin.Forms funkce nativní platformy:
Vytvoření rozhraní
Prvním krokem při vyvolání nativní funkce platformy ze sdíleného kódu je vytvoření rozhraní, které definuje rozhraní API pro interakci s nativními funkcemi platformy. Toto rozhraní by mělo být umístěné ve sdíleném projektu kódu.
Následující příklad ukazuje rozhraní pro rozhraní API, které lze použít k načtení orientace zařízení:
public interface IDeviceOrientationService
{
DeviceOrientation GetOrientation();
}
Implementace rozhraní na jednotlivých platformách
Po vytvoření rozhraní, které definuje rozhraní API pro interakci s nativní funkcí platformy, musí být rozhraní implementováno v každém projektu platformy.
iOS
Následující příklad kódu ukazuje implementaci rozhraní v iOSu IDeviceOrientationService
:
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
Následující příklad kódu ukazuje implementaci rozhraní v Androidu IDeviceOrientationService
:
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;
}
}
}
Univerzální platforma Windows
Následující příklad kódu ukazuje implementaci IDeviceOrientationService
rozhraní na Univerzální platforma Windows (UPW):
namespace DependencyServiceDemos.UWP
{
public class DeviceOrientationService : IDeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
ApplicationViewOrientation orientation = ApplicationView.GetForCurrentView().Orientation;
return orientation == ApplicationViewOrientation.Landscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
}
}
}
Registrace implementací platformy
Po implementaci rozhraní v každém projektu platformy musí být implementace platformy zaregistrované v DependencyService
nástroji , aby Xamarin.Forms je bylo možné vyhledat za běhu. To se obvykle provádí s DependencyAttribute
, což označuje, že zadaný typ poskytuje implementaci rozhraní.
Následující příklad ukazuje použití DependencyAttribute
k registraci implementace IDeviceOrientationService
iOS rozhraní:
using Xamarin.Forms;
[assembly: Dependency(typeof(DependencyServiceDemos.iOS.DeviceOrientationService))]
namespace DependencyServiceDemos.iOS
{
public class DeviceOrientationService : IDeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
...
}
}
}
V tomto příkladu DependencyAttribute
registruje s DeviceOrientationService
DependencyService
. Podobně by měly být implementace IDeviceOrientationService
rozhraní na jiných platformách registrovány DependencyAttribute
v .
Další informace o registraci implementací platformy v DependencyService
tématu Xamarin.Forms Registrace a řešení služby DependencyService.
Řešení implementací platformy
Po registraci implementací platformy s DependencyService
implementací platformy je nutné před vyvolání vyřešit implementace. To se obvykle provádí ve sdíleném kódu pomocí DependencyService.Get<T>
metody.
Následující kód ukazuje příklad volání Get<T>
metody k vyřešení IDeviceOrientationService
rozhraní a následné vyvolání jeho GetOrientation
metody:
IDeviceOrientationService service = DependencyService.Get<IDeviceOrientationService>();
DeviceOrientation orientation = service.GetOrientation();
Alternativně lze tento kód zúžením na jeden řádek:
DeviceOrientation orientation = DependencyService.Get<IDeviceOrientationService>().GetOrientation();
Další informace o řešení implementací platformy pomocí DependencyService
tématu Xamarin.Forms Registrace a řešení služby DependencyService.