Xamarin
Türkiye [beta]
Konular

Powered by Rise Consulting


DependencyService Nedir?

DependencyService Nedir?

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.

 

Related

Share

Yorumunuz

  • Recent
  • Popular
  • Tag
Etkinlikler