如何使用dagger.android将活动注入另一个类中? [英] How to inject activity into another class using dagger.android?
本文介绍了如何使用dagger.android将活动注入另一个类中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用新的dagger.android方法注入活动,但是我想知道如果要将 Activity
注入到类中怎么办?也许 Navigator
类需要当前活动:
I'm using the new dagger.android method to inject activities, but I wonder what to do if you want to inject Activity
to a class? Maybe a Navigator
class which needs the current activity:
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
...
}
也许对于每个活动都可以使用类似的方法?
Maybe something like this for each activity might work?
@Binds abstract fun bindActivity(yourActivity: YourActivity): Activity
但是我不喜欢必须为所有活动编写代码的想法,有没有更好的方法?
But I don't like the idea of having to write this for all activities, is there a better way?
推荐答案
不幸的是,匕首-android-processor不会自动创建此绑定。
Unfortunately dagger-android-processor don't create this binding automatically.
您还需要一个模块:
@Module
interface RegisterModule {
@Binds
fun bindActivity(activity: RegisterActivity): Activity
}
并在您的ActivityBindingModule中:
And in your ActivityBindingModule:
@ContributesAndroidInjector(modules = arrayOf(RegisterModule::class))
abstract fun contributeRegisterActivity(): RegisterActivity
这篇关于如何使用dagger.android将活动注入另一个类中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文