Xamarin.Forms DependencyService tanıtımıXamarin.Forms DependencyService Introduction

Örnek indirin örnek indirinDownload Sample Download the sample

DependencyServiceSınıfı, Xamarin.Forms uygulamaların paylaşılan koddan yerel platform işlevselliğini çağırmasına olanak sağlayan bir hizmet bulucudır.The DependencyService class is a service locator that enables Xamarin.Forms applications to invoke native platform functionality from shared code.

DependencyServiceYerel platform işlevselliğini çağırmak için kullanımı işlemi şu şekilde yapılır:The process for using the DependencyService to invoke native platform functionality is to:

  1. Paylaşılan kodda yerel platform işlevselliği için bir arabirim oluşturun.Create an interface for the native platform functionality, in shared code. Daha fazla bilgi için bkz. arabirim oluşturma.For more information, see Create an interface.
  2. Gerekli platform projelerinde arabirimini uygulayın.Implement the interface in the required platform projects. Daha fazla bilgi için bkz. her platformda arabirimini uygulama.For more information, see Implement the interface on each platform.
  3. Platform uygulamalarını ile kaydedin DependencyService .Register the platform implementations with the DependencyService. Bu Xamarin.Forms , çalışma zamanında platform uygulamalarını bulmayı sağlar.This enables Xamarin.Forms to locate the platform implementations at runtime. Daha fazla bilgi için bkz. platform uygulamalarını kaydetme.For more information, see Register the platform implementations.
  4. Paylaşılan koddan platform uygulamalarını çözümleyin ve onları çağırın.Resolve the platform implementations from shared code, and invoke them. Daha fazla bilgi için bkz. platform uygulamalarını çözümleme.For more information, see Resolve the platform implementations.

Aşağıdaki diyagramda, yerel platform işlevselliğinin bir uygulamada nasıl çağrıldığı gösterilmektedir Xamarin.Forms :The following diagram shows how native platform functionality is invoked in a Xamarin.Forms application:

::: No-Loc (Xamarin. Forms)::: DependencyService sınıfı kullanılarak hizmet konumuna genel bakışOverview of service location using the Xamarin.Forms DependencyService class

Arabirim oluşturmaCreate an interface

Paylaşılan koddan yerel platform işlevselliğini çağırabilmekte olan ilk adım, yerel platform işlevleriyle etkileşim kurmak için API 'YI tanımlayan bir arabirim oluşturmaktır.The first step in being able to invoke native platform functionality from shared code, is to create an interface that defines the API for interacting with the native platform functionality. Bu arabirim, paylaşılan kod projenize yerleştirilmelidir.This interface should be placed in your shared code project.

Aşağıdaki örnek, bir cihazın yönünü almak için kullanılabilecek bir API arabirimi gösterir:The following example shows an interface for an API that can be used to retrieve the orientation of a device:

public interface IDeviceOrientationService
{
    DeviceOrientation GetOrientation();
}

Her platformda arabirimini uygulamaImplement the interface on each platform

Yerel platform işlevleriyle etkileşim kurmak için API 'YI tanımlayan arabirimi oluşturduktan sonra, arabirimin her platform projesinde uygulanması gerekir.After creating the interface that defines the API for interacting with the native platform functionality, the interface must be implemented in each platform project.

iOSiOS

Aşağıdaki kod örneği, IDeviceOrientationService iOS üzerinde arabirimin uygulamasını gösterir:The following code example shows the implementation of the IDeviceOrientationService interface on 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;
        }
    }
}

AndroidAndroid

Aşağıdaki kod örneği, IDeviceOrientationService Android 'de arabirimin uygulanmasını göstermektedir:The following code example shows the implementation of the IDeviceOrientationService interface on 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;
        }
    }
}

Evrensel Windows PlatformuUniversal Windows Platform

Aşağıdaki kod örneği, IDeviceOrientationService Evrensel Windows platformu (UWP) üzerinde arabirimin uygulanmasını gösterir:The following code example shows the implementation of the IDeviceOrientationService interface on the Universal Windows Platform (UWP):

namespace DependencyServiceDemos.UWP
{
    public class DeviceOrientationService : IDeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
            ApplicationViewOrientation orientation = ApplicationView.GetForCurrentView().Orientation;
            return orientation == ApplicationViewOrientation.Landscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
        }
    }
}

Platform uygulamalarını kaydetmeRegister the platform implementations

Her platform projesinde arabirimini uyguladıktan sonra, platform uygulamalarının, DependencyService çalışma zamanında bulabilmesi için, ile kayıtlı olmaları gerekir Xamarin.Forms .After implementing the interface in each platform project, the platform implementations must be registered with the DependencyService, so that Xamarin.Forms can locate them at runtime. Bu genellikle ile gerçekleştirilir ve bu, DependencyAttribute belirtilen türün arabirimin bir uygulamasını sağladığını gösterir.This is typically performed with the DependencyAttribute, which indicates that the specified type provides an implementation of the interface.

Aşağıdaki örnekte, DependencyAttribute arabiriminin iOS uygulamasını kaydetmek için kullanımı gösterilmektedir IDeviceOrientationService :The following example shows using the DependencyAttribute to register the iOS implementation of the IDeviceOrientationService interface:

using Xamarin.Forms;

[assembly: Dependency(typeof(DependencyServiceDemos.iOS.DeviceOrientationService))]
namespace DependencyServiceDemos.iOS
{
    public class DeviceOrientationService : IDeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
            ...
        }
    }
}

Bu örnekte, DependencyAttribute DeviceOrientationService ile kaydeder DependencyService .In this example, the DependencyAttribute registers the DeviceOrientationService with the DependencyService. Benzer şekilde, IDeviceOrientationService diğer platformlarda arabirimin uygulamaları ile kaydedilmelidir DependencyAttribute .Similarly, the implementations of the IDeviceOrientationService interface on other platforms should be registered with the DependencyAttribute.

Platform uygulamalarını ile kaydetme hakkında daha fazla bilgi için DependencyService bkz. Xamarin.Forms dependencyservice kaydı ve çözümlemesi.For more information about registering platform implementations with the DependencyService, see Xamarin.Forms DependencyService Registration and Resolution.

Platform uygulamalarını çözümleResolve the platform implementations

İle platform uygulamalarının kaydını izleyerek DependencyService uygulamalar çağrılmadan önce çözümlenmelidir.Following registration of platform implementations with the DependencyService, the implementations must be resolved before being invoked. Bu, genellikle yöntemi kullanılarak paylaşılan kodda gerçekleştirilir DependencyService.Get<T> .This is typically performed in shared code using the DependencyService.Get<T> method.

Aşağıdaki kod, Get<T> arabirimi çözümlemek için yönteminin çağrılması IDeviceOrientationService ve sonra metodunu çağırmak için bir örnek gösterir GetOrientation :The following code shows an example of calling the Get<T> method to resolve the IDeviceOrientationService interface, and then invoking its GetOrientation method:

IDeviceOrientationService service = DependencyService.Get<IDeviceOrientationService>();
DeviceOrientation orientation = service.GetOrientation();

Alternatif olarak, bu kod tek bir satıra dar olabilir:Alternatively, this code can be condensed into a single line:

DeviceOrientation orientation = DependencyService.Get<IDeviceOrientationService>().GetOrientation();

Platform uygulamalarını ile çözme hakkında daha fazla bilgi için DependencyService bkz. Xamarin.Forms dependencyservice kaydı ve çözümlemesi.For more information about resolving platform implementations with the DependencyService, see Xamarin.Forms DependencyService Registration and Resolution.