Aracılığıyla paylaş


Xamarin.Forms DependencyService'e Giriş

DependencyService sınıfı, uygulamaların paylaşılan koddan yerel platform işlevselliği çağırmasını sağlayan Xamarin.Forms bir hizmet bulucudur.

yerel platform işlevselliğini çağırmak için komutunu kullanma DependencyService işlemi şu şekildedir:

  1. Paylaşılan kodda yerel platform işlevselliği için bir arabirim oluşturun. Daha fazla bilgi için bkz . Arabirim oluşturma.
  2. Gerekli platform projelerinde arabirimi uygulayın. Daha fazla bilgi için bkz . Her platformda arabirimi uygulama.
  3. platform uygulamalarını ile DependencyServicekaydedin. Bu, çalışma zamanında platform uygulamalarının bulunmasını sağlar Xamarin.Forms . Daha fazla bilgi için bkz . Platform uygulamalarını kaydetme.
  4. Paylaşılan koddan platform uygulamalarını çözümleyin ve bunları çağırın. Daha fazla bilgi için bkz . Platform uygulamalarını çözme.

Aşağıdaki diyagramda bir uygulamada yerel platform işlevselliğinin nasıl çağrıldığı Xamarin.Forms gösterilmektedir:

DependencyService sınıfını kullanarak hizmet konumuna Xamarin.Forms genel bakış

Arabirim oluşturma

Paylaşılan koddan yerel platform işlevselliğini çağırabilmenin ilk adımı, yerel platform işlevselliğiyle etkileşime geçmek için API'yi tanımlayan bir arabirim oluşturmaktır. Bu arabirim, paylaşılan kod projenize yerleştirilmelidir.

Aşağıdaki örnekte, bir cihazın yönlendirmesini almak için kullanılabilecek bir API arabirimi gösterilmektedir:

public interface IDeviceOrientationService
{
    DeviceOrientation GetOrientation();
}

Her platformda arabirimi uygulama

Yerel platform işlevselliğiyle etkileşime yönelik API'yi tanımlayan arabirimi oluşturduktan sonra, arabirimin her platform projesinde uygulanması gerekir.

iOS

Aşağıdaki kod örneği, arabirimin IDeviceOrientationService iOS'ta uygulanmasını gösterir:

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

Aşağıdaki kod örneği, Android'de arabirimin IDeviceOrientationService uygulamasını gösterir:

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 Platformu

Aşağıdaki kod örneği, arabirimin IDeviceOrientationService Evrensel Windows Platformu (UWP) üzerindeki uygulamasını gösterir:

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ı kaydetme

Arabirim her platform projesinde uygulandıktan sonra, platform uygulamalarının çalışma zamanında bulunabilmesi Xamarin.Forms için ile DependencyServicekaydedilmesi gerekir. Bu genellikle ile DependencyAttributegerçekleştirilir ve belirtilen türün arabiriminin bir uygulamasını sağladığını gösterir.

Aşağıdaki örnekte, arabiriminin DependencyAttribute iOS uygulamasını kaydetmek için komutunun IDeviceOrientationService kullanılması gösterilmektedir:

using Xamarin.Forms;

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

Bu örnekte, DependencyAttribute ile kaydeder DeviceOrientationService DependencyService. Benzer şekilde, arabiriminin IDeviceOrientationService diğer platformlardaki uygulamaları ile DependencyAttributekaydedilmelidir.

ile platform uygulamalarını DependencyServicekaydetme hakkında daha fazla bilgi için bkz Xamarin.Forms . DependencyService Kaydı ve Çözümü.

Platform uygulamalarını çözme

ile platform uygulamalarının kaydından DependencyServicesonra, uygulamalar çağrılmadan önce çözümlenmelidir. Bu genellikle yöntemi kullanılarak paylaşılan kodda DependencyService.Get<T> gerçekleştirilir.

Aşağıdaki kod, arabirimi çözümlemek IDeviceOrientationService için yöntemini çağırma Get<T> ve ardından yöntemini çağırma örneğini GetOrientation gösterir:

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

Alternatif olarak, bu kod tek bir satırda değiştirilebilir:

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

ile DependencyServiceplatform uygulamalarını çözümleme hakkında daha fazla bilgi için bkz Xamarin.Forms . DependencyService Kaydı ve Çözümü.