• EvrenAy

Dagger 2 vs Koin - Koin ile Dependency Injection

Güncelleme tarihi: 7 Haz 2021



What is KOIN?

Koin kendini şu şekilde tanımlıyor,

Koin is a DSL, a light container and a pragmatic API

Konuyu biraz açacak olursak, düşük yüke sahip, kullanımı kolay, modüler yapıda kullanılan bir bağımlılık api’siyiz diyorlar. Bakalım gerçekten öyle mi inceledikçe ve dagger2 ile karşılaştırdıkça göreceğiz :)

Başlamadan önce şunu söylemeliyim ki koin’in kendi dokümantasyonu da çok güzel yazılmış, daha detaylı bilgiler için aşağıdaki linkten inceleyebilirsiniz



Koin'de bağımlılık yönetiminin modüler bir şekilde gerçekleştiğini söylemiştim. Peki nasıl oluyor bu modüler bağımlılık yönetimi şimdi de biraz onu inceleyelim. Modülerliği sağlayan ve modülleri oluşturmamızı sağlayan bazı kavramlar var. Kısaca göz atalım.

factory {} : Bir instance fabrikası diyebiliriz, bu tanım bizim için her talep ettiğimizde yeni bir instance oluşturmak için görevlendirilmiştir .

single {} : Başlangıçta benzersiz, unique bir instance yaratılacağını ve daha sonraki her injection işleminde bu instance ın paylaşılacağını belirtir.(Bean adıyla da kullanılabilir.)

get() : İnstanceları çözmek için kullanılır. Yani koin, modüller içinde kullandığımız get() sayesinde bizim hangi class'a neyi enjekte ettiğimizi anlar.

module { } : Modülleri yada alt modülleri bu keyword içerisinde oluşturuyoruz.

Koini uygulama içerisinde ayağa kaldırmakta oldukça basit. Application classındaki oncreate metodunda startKoin { } keywordünün içine context ve modüllerimizin tutulduğu bir liste vermemiz yeterli.
startKoin(this, listOf(repositoryModule, networkModule, viewModelModule))

Bir örnekle bu zamana kadar öğrendiklerimizi pekiştirme vakti geldi. Koin'in kotlin ile nasıl kullanılabileceğiyle alakalı Arnaud Giuliani’nun basit bir kahve örneğine rastladım. Ben de konunun daha rahat anlaşılabilmesi için aynı örnekten yararlanıp elimden geldiğince açıklamaya çalışıcam.


Kütüphanemizi projemize dahil edelim

compile 'org.koin:koin-core:2.0.0-rc-2'

Proje Özeti

Projemizi kısaca özetleyecek olursak, bir kahve makinesinin işleyişini senaryo olarak alacağız.

Senaryomuz dahilinde bir ısıtıcımız, bir su pompamız bir de demleme mekanizmamız bulunuyor.

Isıtıcımızın aç, kapat ve sıcak su var mı yok mu kontrolü yapan fonksiyonları bulunuyor.

Su pompamızın eğer su sıcaksa demlemek için gerekli olan suyu pompalayan bir