by inject
- Kotlin kursu
- İleri seviye
- Ders 40/83
- 5 dk
by inject() ile bağımlılık enjekte etmeyi öğrenirsin.
by inject nedir?
by inject(), bir sınıfa bağımlılığını lazy şekilde veren Koin delegate'ıdır. KoinComponent arayüzünü gerektirir.
Örnek: class App : KoinComponent { val repo: Repository by inject() }. Bu sınıf repo özelliğine ilk erişimde Repository örneğini alır. Lazy olduğu için bağımlılık ilk kullanılana kadar oluşturulmaz. inject yerine get() de kullanılabilir; fakat eager (hemen) yükler. by inject() performans açısından daha verimlidir.
Uygulama KoinComponent ile by inject
class Repository tanımla. class App : KoinComponent tanımla; içinde val repo: Repository by inject() olsun. main içinde println("Sınıf hazır") yazdır.
Başlangıç kodu
// inject delegate
// buraya yaz
import org.koin.component.KoinComponent
import org.koin.inject
fun main() {
}Örnek çözüm
class Repository
class App : KoinComponent {
val repo: Repository by inject()
}
fun main() {
println("Sınıf hazır")
}Beklenen çıktı
Sınıf hazır
KoinComponent arayüzü
Bir sınıfın by inject() kullanabilmesi için KoinComponent arayüzünü uygulaması gerekir. Bu arayüz, sınıfa Koin erişimi sağlar.
Örnek: class Service : KoinComponent { val repo: Repository by inject() }. KoinComponent arayüzü uygulandığında sınıf içinde get() ve inject() çağrıları yapılabilir. Bu, sınıfın doğrudan Koin'e bağlanmasını sağlar. Dagger'dan farklı olarak Koin'de annotation yoktur; sadece arayüz uygulanır. Bu yaklaşım Kotlin idiomatiktir.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 by inject() ne zaman bağımlılığı oluşturur?
- Sınıf oluşturulduğunda
- Uygulama başlangıcında
- İlk erişimde Doğru cevap
- Hiçbir zaman
Açıklama: by inject() lazy olduğu için ilk erişimde oluşturur.
2 by inject çağrısını tamamla
class App : KoinComponent {
val repo: Repository ____()
}
class App : KoinComponent {
val repo: Repository by inject()
}
Açıklama: by inject() ile bağımlılık lazy alınır.
3 by inject parçalarını eşle
| Kavram | Anlamı |
|---|---|
by inject |
Lazy delegate |
KoinComponent |
Arayüz |
Repository |
Bağımlılık |
App |
Sınıf |