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"
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()) } }
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 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" } }
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: