Home Android Resolving dalam penggunaan Dagger 2

Resolving dalam penggunaan Dagger 2

0
Resolving dalam penggunaan Dagger 2

Dagger adalah suatu mekanise untuk menerapkan Dependency Injection tanpa membuat penulisan kode menjadi  berulang – ulang, atau dengan kata lain untuk menyederhanakan Dependency Injection.

“Dependency injection is a technique whereby one object supplier the dependencies of another object.”

Dengan kata lain, Dependency Injection adalah sebuah teknik dimana, kita bisa menyediakan sebuah objek yang ketergantungan terhadap objek lain.

contoh pada suatu pemrograman Kotlin terdapat sebuah class atau beberapa class. Oleh karena memiliki beberapa class maka akan sering ketergantungan antara 1 class dengan class yang lain. Contoh :

class Mesin () {

fun hidup () {

println(“Mesin nyala”)

}

}

class Mobil () {

fun main() {

mesin = Mesin

mesin.hidup()

}

}

oleh karena itu dengan menggunakan Library Dagger 2 kita dapat meminimalisimir inisialisasi dalam penggunaan class. Sehingga kita dapat mengurangi yang namannya boilerplate pada codingan kita.

Namun meski pada Dagger 2 ini sudah cukup mampu mengatasi permasalan dari rumitnya codingan. Akan tetapi pada Dagger 2 ini secara impelementasi konfigurasi sangatlah rumit dan pada Dagger 2 ini masih terdapat banyak sekali bug salah satunya adalah kegagalan inject pada saat kita me-running aplikasi kita sehingga class yang akan kita inject gagal. Oleh karena itu Dagger Hilt support by Google diciptakan untuk menghilangkan kerumitan saat konfigurasi dan bug fixing.

Namun, itu hanyalah salah satu contoh alternatif untuk menyelesaikan permasalahan seperti kegagalan inject ketika menggunakan Dagger 2, Akan tetapi apabila kita belum paham mengenai Dagger Hilt dan baru saja mulai belajar Dagger 2. Maka saya akan memberikan solusi terhadap permasalahan yang terjadi ketika ada kegagalan inject.

package com.bintang.luasmvpdagger.dagger.module


import com.bintang.luasmvpdagger.model.RestApi
import com.bintang.luasmvpdagger.view.WisataActivity
import com.bintang.luasmvpdagger.view.WisataPresenter
import com.bintang.luasmvpdagger.view.WisataVIew
import dagger.Binds
import dagger.Module
import dagger.Provides
import retrofit2.Retrofit
import javax.inject.Singleton


@Module
abstract class AppModule {

    @Module
     companion object{
         @Singleton
         @Provides
         fun providesRestApi(retrofit: Retrofit): RestApi =
                 retrofit.create(RestApi::class.java)

         @Singleton
         @Provides
         fun providesWisataView(
                 view: WisataVIew,
                 restApi: RestApi
         ): WisataPresenter = WisataPresenter(view, restApi)


     }
    @Binds
    abstract fun bindWisataView(activity: WisataActivity): WisataVIew
}

Perhatikan pada class AppModule ini, pada Class tersebut mengimplemntasikan Annotation @Singleton dimana maksudnya adalah class – class tersebut hanya dapat dijalankan sekali didalam aplikasi tersebut. Nah namun ada satu component tambahan atau pendukung yang belum terimplementasi yaitu @Jvmstatic, ini merupakan component pendukung yang harus di implementasikan pada AppModule tersebut pada class yang akan kita inject nanti.

setelah dirubah akan menjadi seperti berikut :

package com.bintang.luasmvpdagger.dagger.module


import com.bintang.luasmvpdagger.model.RestApi
import com.bintang.luasmvpdagger.view.WisataActivity
import com.bintang.luasmvpdagger.view.WisataPresenter
import com.bintang.luasmvpdagger.view.WisataVIew
import dagger.Binds
import dagger.Module
import dagger.Provides
import retrofit2.Retrofit
import javax.inject.Singleton


@Module
abstract class AppModule {

    @Module
     companion object{
         @JvmStatic
         @Provides
         fun providesRestApi(retrofit: Retrofit): RestApi =
                 retrofit.create(RestApi::class.java)

         @JvmStatic
         @Provides
         fun providesWisataView(
                 view: WisataVIew,
                 restApi: RestApi
         ): WisataPresenter = WisataPresenter(view, restApi)


     }
    @Binds
    abstract fun bindWisataView(activity: WisataActivity): WisataVIew
}

Boleh meninggalkan @Singleton atau boleh juga memberikan 3 anotasi sekaligus sehingga menjadi @Jvmstatic @Singleton @Provides

Sekian tips dari saya. harapan saya dapat membantu teman-teman dan dapat menjadi referensi yang bermanfaat bagi para pembaca.