Press ESC to close

Xamarin Dependency Services

Xamarinde cross platform çalışırken bazen farklı platformlarda farklı davranışlar sergilenmesini isteyebiliriz. Bunun için Xamarin bize dependency services ile çözüm sunuyor. Kullanımının oldukça basit olduğunu söylemek gerek. Bunun için bir örnek yaptım ben. Tabi bu örnekleri Yiğit Özaksüt’ün Xamarin Eğitimleri derslerini izleyerek sizde yapabilirsiniz. Xamarin derslerini izlemek için Microsoft Açık Akademi , youtube veya Xamarin Türkiye sitelerine girip izleyebilirsiniz.

Anlatacağım bu örnekte cross-platform çalıştığımız için aynı kodun her yerde çalışmasının yanı sıra platformlara özel olarak da çalışmasını sağlamak için bir takım kodlar eklemeniz gerekiyor. Bunun için öncelikle projemizin portable katmanında bir “helper” adında interface oluşturmamız gerekiyor. Bu interface ile platformlara özel olarak hangi işlemi yaptırmak istiyorsak bu interfacede tanımlamak zorundayız. Şimdi yapacağımız örnekte eğer projemiz android bir ortamda çalışıyorsa ekrana “0” değerini iOS’da çalışıyorsa “1” değerinin dönmesini sağlayan bir uygulama yapacağız.

İlk olarak portable katmanında bize yardımcı olması için bir interface açmamız gerekiyor. Sonrasında bu interfacei diğer platformlarda kalıtım olarak alıp implementa edeceğiz. Bize yardımcı olması için açacağız bu interface dosyasına “Helper” adını verdim ben. Sonrasında hangi işlemi yapmak istiyorsak buna göre bir fonksiyon tanımlamamız gerekiyor. Ben platformlardan birer sayı alacağım için buna göre bir fonksiyon oluşturuyorum.

public interface IDeviceHelper
    {
        int GetDeviceNumber();
    }

Bu interfacei oluşturduktan sonra diğer platformlardan numara almak için her platformda yine “Helper” adında birer sınıf oluşturuyorum. Bu sınıfları portable kısmında oluşturduğumuz interfaceden kalıtım alacak şekilde implemente ediyoruz. Android kısmında 0 değerini döndüreceğim.

[assembly:Xamarin.Forms.Dependency(typeof(DeviceHelper))]
namespace XamarinDependency.Droid.Helper
{
    public class DeviceHelper : IDeviceHelper
    {
        public int GetDeviceName()
        {
            return 0;

        }
    }
}

Tabi bu sınıfın bir dependency services olduğunu belirtmek için sayfanın başında bir takım kod yazmamız gerekiyor. Bu işlemi mutlaka yapmamız gerekiyor. Android platformunda 0 dçndürdükten sonra aynı şeyleri iOS platformu için de yapmamız gerekiyor. Başına tabi ki bir dependency services olduğunu belirtmemiz gerekiyor.

[assembly:Xamarin.Forms.Dependency(typeof(DeviceHelper))]
namespace XamarinDependency.iOS.Helper
{
    public class DeviceHelper : IDeviceHelper
    {

        public int GetDeviceNumber()
        {
            return 1;
        }
    }
}

Bu işlemleri hallettikten sonra portable kısmında bulunan App sınıfında Main Page içinde bir takım kod yazmamız gerekiyor. Numara alacağımız için number adında bir değişken tanımlıyoruz. Bu değişkeni bir dependency services sınıfından alacağımız için get metodunu kullanıp bu metodun tipini hangi tür interfaceden aldıysak onu veriyoruz. Sonrasında ise interfacede bulunan fonksiyonlardan istediğimizi seçiyoruz.

namespace XamarinDependency
{
    public class App : Application
    {
        public App()
        {
            int number = DependencyService.Get<IDeviceHelper>().GetDeviceNumber();
            MainPage = new Sayfa(number);
            
        }
    }
}

Sonrasında ise klasik Xamarin işlemleri. Eğer projeye github üzerinden erişmek istiyorsanız buradan erişebilirsiniz. Sorularınız olursa mail atabilirsiniz veya yorum yazabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir