如何使用dagger.android将活动注入另一个类?

时间:2017-05-30 17:16:29

标签: android dagger-2 dagger

我正在使用新的dagger.android方法来注入活动,但是我想知道如果要将Activity注入类中该怎么办?也许是需要当前活动的Navigator类:

package com.abydos.messenger.ui

import android.app.Activity
import com.abydos.messenger.ui.register.RegisterActivity
import org.jetbrains.anko.startActivity
import javax.inject.Inject

class Navigator @Inject constructor(private val activity: Activity) {
    fun register() {
        activity.startActivity<RegisterActivity>()
    }

    ...
}

并在ActivityBindingModule.kt

package com.abydos.messenger.di

import com.abydos.messenger.ui.register.RegisterActivity
import dagger.Module
import dagger.android.ContributesAndroidInjector

@Module
abstract class ActivityBindingModule {
    @ContributesAndroidInjector
    abstract fun contributeRegisterActivity(): RegisterActivity

    ...
}

对于每项活动,这样的事情可能有用吗?

@Binds abstract fun bindActivity(yourActivity: YourActivity): Activity

但我不喜欢为所有活动写这个的想法,有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,dagger-android-processor不会自动创建此绑定。

您还需要一个模块:

@Module
interface RegisterModule {
    @Binds
    fun bindActivity(activity: RegisterActivity): Activity
}

在ActivityBindingModule中:

@ContributesAndroidInjector(modules = arrayOf(RegisterModule::class))
abstract fun contributeRegisterActivity(): RegisterActivity