Bagikan melalui


Xamarin.Forms Pengantar DependencyService

Kelas DependencyService ini adalah pencari layanan yang memungkinkan Xamarin.Forms aplikasi untuk memanggil fungsionalitas platform asli dari kode bersama.

Proses untuk menggunakan DependencyService fungsionalitas platform asli adalah dengan:

  1. Buat antarmuka untuk fungsionalitas platform asli, dalam kode bersama. Untuk informasi selengkapnya, lihat Membuat antarmuka.
  2. Terapkan antarmuka dalam proyek platform yang diperlukan. Untuk informasi selengkapnya, lihat Menerapkan antarmuka pada setiap platform.
  3. Daftarkan implementasi platform dengan DependencyService. Ini memungkinkan Xamarin.Forms untuk menemukan implementasi platform pada runtime. Untuk informasi selengkapnya, lihat Mendaftarkan implementasi platform.
  4. Atasi implementasi platform dari kode bersama, dan panggil. Untuk informasi selengkapnya, lihat Mengatasi implementasi platform.

Diagram berikut menunjukkan bagaimana fungsionalitas platform asli dipanggil dalam aplikasi Xamarin.Forms :

Gambaran umum lokasi layanan menggunakan Xamarin.Forms kelas DependencyService

Membuat antarmuka

Langkah pertama dalam dapat memanggil fungsionalitas platform asli dari kode bersama, adalah membuat antarmuka yang menentukan API untuk berinteraksi dengan fungsionalitas platform asli. Antarmuka ini harus ditempatkan dalam proyek kode bersama Anda.

Contoh berikut menunjukkan antarmuka untuk API yang dapat digunakan untuk mengambil orientasi perangkat:

public interface IDeviceOrientationService
{
    DeviceOrientation GetOrientation();
}

Menerapkan antarmuka pada setiap platform

Setelah membuat antarmuka yang menentukan API untuk berinteraksi dengan fungsionalitas platform asli, antarmuka harus diimplementasikan di setiap proyek platform.

iOS

Contoh kode berikut menunjukkan implementasi IDeviceOrientationService antarmuka di 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

Contoh kode berikut menunjukkan implementasi IDeviceOrientationService antarmuka di 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;
        }
    }
}

Platform Windows Universal

Contoh kode berikut menunjukkan implementasi IDeviceOrientationService antarmuka pada Platform Windows Universal (UWP):

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

Mendaftarkan implementasi platform

Setelah menerapkan antarmuka di setiap proyek platform, implementasi platform harus didaftarkan dengan DependencyService, sehingga Xamarin.Forms dapat menemukannya pada runtime. Ini biasanya dilakukan dengan DependencyAttribute, yang menunjukkan bahwa jenis yang ditentukan menyediakan implementasi antarmuka.

Contoh berikut menunjukkan penggunaan DependencyAttribute untuk mendaftarkan implementasi iOS antarmuka IDeviceOrientationService :

using Xamarin.Forms;

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

Dalam contoh ini, DependencyAttribute mendaftarkan DeviceOrientationService dengan DependencyService. Demikian pula, implementasi IDeviceOrientationService antarmuka pada platform lain harus terdaftar dengan DependencyAttribute.

Untuk informasi selengkapnya tentang mendaftarkan implementasi platform dengan DependencyService, lihat Xamarin.Forms Pendaftaran dan Resolusi DependencyService.

Mengatasi implementasi platform

Setelah pendaftaran implementasi platform dengan DependencyService, implementasi harus diselesaikan sebelum dipanggil. Ini biasanya dilakukan dalam kode bersama menggunakan DependencyService.Get<T> metode .

Kode berikut menunjukkan contoh pemanggilan Get<T> metode untuk menyelesaikan IDeviceOrientationService antarmuka, lalu memanggil metodenya GetOrientation :

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

Atau, kode ini dapat dikondensasikan menjadi satu baris:

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

Untuk informasi selengkapnya tentang menyelesaikan implementasi platform dengan DependencyService, lihat Xamarin.Forms Pendaftaran dan Resolusi DependencyService.