Depedency Injection dengan
Dagger, Hilt & Koin
Alfian Yusuf Abdullah
Google Associate Android Developer, Code Reviewer Dicoding
Dependencies
Let’s take a sample
Not implemented Dependencies Injection
What’s we get
● Class Car dan Engine saling terhubung erat
(tightly coupled). Sehingga ketika ingin
membuat object baru dengan Engine yang
berbeda, Anda harus membuat Class Car yang
baru lagi.
● Membuat unit testing menjadi lebih sulit.
Karena Anda harus menggunakan real object
Engine secara langsung, Anda tak bisa
menerapkan test-double seperti membuat
fake object atau mock object.
Approaching Dependencies Injection
Manual Dependency
Injection
Constructor
Injection
Engine ke dalam Constructor. Sehingga
implementasi pada kode sebelumnya
akan menjadi seperti disamping
Method/Field
Injection
Beberapa kelas mungkin tidak bisa
ditambahkan constructor karena
memang sudah dibuat oleh sistem,
contohnya seperti Activity dan
Fragment. Jadi, cara yang bisa dilakukan
yaitu mengirimkan dependency
tersebut melalui setter setelah kelas itu
dibuat seperti disamping
Service Locator
Service
Locator
Service locator berbeda dengan
dependency injection dalam hal
mengontrol dependensi. Pada service
locator class Car yang mengontrol
untuk mengambil object mana yang
akan di-inject. Sedangkan pada
dependency injection Application-lah
yang memiliki kontrol untuk
memberikan / meng-inject object yang
membutuhkan.
Common Problems
Injection Library
Dagger adalah library yang sebelumnya dibuat oleh Square dan kini
di-maintain oleh Google. Library ini termasuk yang banyak digunakan oleh
industri sejak lama. Library ini akan otomatis men-generate kode untuk
injection saat di-compile daripada menuliskannya satu per satu. Sehingga
kode Anda menjadi lebih mudah untuk di-refactor, lebih mudah dites, dan
lebih mudah digunakan kembali. Saat ini Dagger terus mengalami
perkembangan dan support yang lebih bagus dengan Android Studio.
Koin adalah library dependency injection yang dibuat 100% Kotlin oleh
Arnaud Giuliani bersama dengan komunitas. Dengan menggunakan Koin
Anda bisa membuat dependency injection dengan lebih simpel karena
tanpa generated code yang berlebih seperti Dagger. Walaupun banyak
yang menyebut bahwa Koin bukan dependency injection -melainkan
service locator-, banyak industri yang menggunakan Koin karena lebih
mudah dipelajari daripada Dagger.
Let’s get start with Dagger
Basic concepts
Ada 3 (tiga) syarat supaya Dagger bisa melakukan injection, yaitu:
● Field yang akan di-inject harus public.
● Field yang akan di-inject harus diberi annotation @Inject.
● Method inject(client) harus dipanggil dari activity/fragment yang
membutuhkan.
Dagger Dependencies
In Action: Without Dagger
In Action: With Dagger
In Action: With Dagger
Dagger Module Creation
@module
@component
Activity injection
Activity injection
Let’s move to Koin!
Basic concepts
Ada 3 (tiga) syarat untuk melakukan injection pada Koin, yaitu:
● Field yang akan di-inject harus bertipe val.
● Field yang akan di-inject harus menggunakan lazy evaluation by inject().
● Constructor yang di-inject tidak boleh private.
Koin Dependencies
In Action: Without Koin
In Action: With Koin
Koin Module Creation
module
startKoin()
Constructor Injection
What about constructor injection with Dagger?
What about constructor injection with Dagger?
Koin vs Dagger?
Function
Pros and Cons
Dagger-hilt?
Contact:
@alfianyabdullah
THANKS!
Follow us: @dicoding

Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger, Hilt, & Koin