Sdílet prostřednictvím


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:

  1. Ve sdíleném kódu vytvořte rozhraní pro funkci nativní platformy. Další informace naleznete v tématu Vytvoření rozhraní.
  2. Implementujte rozhraní v požadovaných projektech platformy. Další informace najdete v tématu Implementace rozhraní na jednotlivých platformách.
  3. 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.
  4. 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:

Přehled umístění služby pomocí Xamarin.Forms třídy DependencyService

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 DependencyServicená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 DeviceOrientationServiceDependencyService. Podobně by měly být implementace IDeviceOrientationService rozhraní na jiných platformách registrovány DependencyAttributev .

Další informace o registraci implementací platformy v DependencyServicetématu Xamarin.Forms Registrace a řešení služby DependencyService.

Řešení implementací platformy

Po registraci implementací platformy s DependencyServiceimplementací 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í DependencyServicetématu Xamarin.Forms Registrace a řešení služby DependencyService.