DependencyService Nedir?

Kasım 29, 2016
45 Views

ds

DependencyService, Xamarin.Forms’un bize hazır olarak sunduğu bir Dependecy Injection uygulamasıdır. Bir arayüzaracılığıyla platforma özel işlevleri çağırmamızı ve kullanmamızı sağlar. Native uygulamada yapabileceğimiz her şeyi Xamarin.Forms uygulamamızda yapma imkanı sağlar. DependencyService sınıfı static bir sınıftır ve içerisinde 3 adet public static metod barındırır. Bu metodlar:

  •   Get<T>(DependencyFetchTarget):T

            where T : class  (Arayüzü implemente eden platforma özel tanımlı sınıfı döndürür.)

  •   Register<T>()

            where T : class

  •   Register<T,TImpl>()

            where T : class

            where TImpl : class, T

Bunlardan en önemlisi generic bir metod olan Get metodudur.

Peki DependencyService nasıl kullanılır? DependencyService’in kullanımını üç parçada inceleyebiliriz.

1)Arayüz Tanımlama

Paylaşım katmanımızda, kullanacağımız platforma özel işlevleri çağırmak için arayüz tanımlamak mimarimizin daha tutarlı olmasını sağlayacaktır. Bu arayüzün içine platform projemizde kullanmak istediğimiz nesneleri tanımlarız. Örneğin:

public interface IMyInterface

{

  string MyMethod();

}

2) Sınıfları DependencyService ile kullanabilme

İhtiyacımıza uygun arayüz oluşturulduktan sonra diğer platformlarda bu arayüzü implemente eden sınıfları oluşturmalıyız. Bu sınıflar tanımlandığı platforma özel kodları içerirler.

Droid:

    public class MyClass_Droid : IMyInterface

    {

        public string MyMethod()

        {

            return “Xamarin.Droid Çalıştı!”;

        }

    }

 

iOS:

    public class MyClass_iOS : IMyInterface

    {

        public string MyMethod()

        {

            return “Xamarin.iOS Çalıştı!”;

        }

    }

 

Tanımladığımız bu sınıfların çalışma anında DependencyService ile kullanılacağını, assembly özelliği ile derleyiciye bildirmemiz gerekir. Bu sayede DependencyService doğru sınıfı bulur ve kullanır. Bildirme işlemi, Xamarin.Forms.DependencyAttribute (Depedendency özelliği) sınıfı kullanılarak yapılır.  Aşağıdaki ifade uygun sınıfın namespace tanımlamasının tam üstüne yazılmalıdır. Android ve iOS için sırasıyla:

[assembly: Dependency(typeof(MyClass_Droid))]

[assembly: Dependency(typeof(MyClass_iOS))]

3)DependencyService’i çağırma

Yapacağımız son şey, platforma özel kodları içeren sınıfları, paylaşım katmanında kullanabilme işlemidir. Paylaşım katmanımızda yapacağımız çağırma işlemi için DependencyService sınıfındaki Get metodu kullanılır. Get metodu arayüzü implement eden sınıfın bir kopyasını getirir. Buradaki işlem arayüzü somut bir yapıya eşleme işlemidir.

var myVar = DependencyService.Get<IMyInterface>();

string myText = myVar.MyMethod();

NOT: Eğer platform projemizde arayüzü implemente eden sınıfın tanımlamasını yapmazsak DependencyService. Get metodu çalışma esnasında NullReferenceException hatası fırlatacaktır.

 

You may be interested

Fortigate 5.4.0 BlackHole Routing nedir?
Ağ Teknolojileri
0 shares444 views
Ağ Teknolojileri
0 shares444 views

Fortigate 5.4.0 BlackHole Routing nedir?

Caner AKTAŞ - May 29, 2017

Herkese Merhaba,  Bugün kü konumuz Black Hole ( Kara Delik) routing nedir, nerelerde kullanırız ve nasıl kullanırız gibi başlıklar altında…

İŞ İLANI – Bilgi Güvenliği – Destek Uzmanı (ESET Türkiye)
Güvenlik Teknolojileri
0 shares255 views
Güvenlik Teknolojileri
0 shares255 views

İŞ İLANI – Bilgi Güvenliği – Destek Uzmanı (ESET Türkiye)

Mücahid AKÇAY - May 24, 2017

ESET Türkiye İstanbul ofisinde, teknik destek ekibinde çalışacak aşağıdaki özelliklere sahip ekip arkadaşları arayışımız bulunmaktadır. İlgilenenlerin ik@stratus.com.tr adresine Bilgi Güvenliği -…

Fortigate 5.4.0 ile WannaCry nasıl önlenir?
Güvenlik Teknolojileri
0 shares646 views
Güvenlik Teknolojileri
0 shares646 views

Fortigate 5.4.0 ile WannaCry nasıl önlenir?

Caner AKTAŞ - May 23, 2017

Herkese Merhaba, Gündemimize bomba gibi oturan televizyonlar da sosyal medyalarda her yerde görmeye başladığımız WannaCry virüsü ile ilgili birkaç not…

Leave a Comment

Your email address will not be published.