Dagger not initizalize var

I have problems when starting Dagger in Android project with Kotlin.

This estructure is the next one

Dagger is included in an Android module that is called by the client application

MagicBox.kt

interface MagicBox {
   fun getDate(): Long?
}

MagicBoxImpl.kt

class MagicBoxImpl (): MagicBox{

    var date: Long = Date().time

    override fun getDate(): Long {
        return date
    }
}

MainModule.kt

@Module
class MainModule (private val app: Application) {

    @Provides
    @Singleton
    fun provideMagicBox(): MagicBox {
       return MagicBoxImpl()
    }
}

MainComponent.kt

@Singleton
@Component(modules = [MainModule::class, PresenterModule::class])
interface MainComponent{
    fun inject(target: Activity)
}

Application.kt

class Application: Application() {

    lateinit var mainComponent: MainComponent

    override fun onCreate() {
        super.onCreate()

        mainComponent = initDagger(this)
    }

    private fun initDagger(app: Application): MainComponent =
        DaggerMainComponent.builder()
            .mainModule(MainModule(app))
            .build()

}

MainActivity.kt

 @Inject
    lateinit var magicBox: MagicBox

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

        setContentView(R.layout.main_layout)
        (application as ClientSdk).mainComponent.inject(this)

        tvDaggerTest = findViewById(R.id.tvDaggerTest)

        tvDaggerTest!!.text = magicBox.getDate().toString()
}

Get the following error

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property magicBox has not been initialized

Upvotes: 0

Views: 73

Answers (1)

EpicPandaForce
EpicPandaForce

Reputation: 81588

fun inject(target: Activity) should be fun inject(target: MainActivity)


Also for better Dagger usage, the following should be:

@Module
abstract class MainModule {
    @Binds
    abstract fun magicBox(impl: MagicBoxImpl): MagicBox
}

and

@Singleton class MagicBoxImpl @Inject constructor(): MagicBox {

Upvotes: 1

Related Questions