Android Örnekleri #1 - Dependency Injection - Koin Kütüphanesi Kullanımı - #1

Android dependency injection - Koin kütüphanesi

Koin Kotlin dili ile yazılmış bir Dependency Injection kütüphanesidir. (temelinde Service Locator olarak çalışır)

Koin'e örnek kodlar ile devam edelim.

Öncelikle app build.gradle dosyasına koin kütüphanesini eklememiz gerek.

// Koin
    implementation "org.koin:koin-android:$koinVersion"
    implementation "org.koin:koin-androidx-scope:$koinVersion"
    implementation "org.koin:koin-androidx-viewmodel:$koinVersion"
    implementation "org.koin:koin-androidx-fragment:$koinVersion"
    testImplementation "org.koin:koin-test:$koinVersion"
build.gradle

Burdan sonra örnek sınıfları ve appModule değişkeniyle beraber koin'i başlatıyoruz.

interface HelloRepository {
    fun giveHello(): String?
}

class HelloRepositoryImpl() : HelloRepository {
    override fun giveHello() = "Merhaba Koin"
}

class MySimplePresenter(val repo: HelloRepository) {

    fun sayHello() = "${repo.giveHello()} from MySimplePresenter"
}

appModule'ü tanımlamak için module fonksiyonunu kullanıyoruz.

val appModule = module {

    // single instance of HelloRepository
    single<HelloRepository> { HelloRepositoryImpl() }

    // Simple Presenter Factory
    factory { MySimplePresenter(get()) }
}
AppModule.kt

get() kullanımı ile gerekli tipteki değişkeni alıp otomatik olarak kullanabiliyoruz Koin ile.
single anahtar kelimesi objenin bir defa oluşturulmasını sağlıyor.
factory anahtar kelimesiyle ise obje her inject edildiğinde baştan oluşturuluyor.

Aşağıda gibi MyApplication sınıfını oluşturuyoruz.

class MyApplication : Application(){

    override fun onCreate() {
        super.onCreate()

        // Koin'i başlattığımız yer
        startKoin{
            androidLogger()
            androidContext(this@MyApplication)
            modules(listOf(appModule)) // burada oluşturduğumuz modulleri parametre olarak vermemiz gerekiyor.
        }
    }
}
MyApplication

MyApplication sınıfını oluşturup Koin'i başlattıktan sonra artık objeleri çağırabiliriz.

Temelde 2 farklı şekilde obje oluşturulabilir;

  • by inject() ile lazy kullanımı
  • get() ile direkt setleyerek. // lazy değildir.
 
class MySimpleActivity : AppCompatActivity() {

    // Lazy injected MySimplePresenter
    val firstPresenter: MySimplePresenter by inject() // inject ile lazy kullanımı 1. kullanım

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val secondPresenter: MySimplePresenter = get() // 2. kullanım

        firstPresenter.sayHello() // = "Merhaba Koin from MySimplePresenter"
        secondPresenter.sayHello() // = "Merhaba Koin from MySimplePresenter"
    }
}
MySimpleActivity

Bu derste Koin kütüphanesini örneklendirdik. Detaylı açıklama istediğiniz kısımları soru - cevap bölümüne yazabilirsiniz.

Koin kullanımı serisi 2. yazısı için: Koin kullanımı #2
Sorularınızı ve isteklerinizi yorum bölümünden iletebilirsiniz.
Kaynak:
Bu postu paylaş:

0 yorum

Yorum yapmak için giriş yapmanız gerekmektedir. Giriş yap
Henüz hesabınız yoksa 20 saniyenizi ayırıp kayıt olabilirsiniz. Kaydol