【发布时间】:2017-09-30 18:31:06
【问题描述】:
我在尝试使用 Kotlin 和 Dagger 2 时遇到了这个问题。
“没有@Provides-或@Produces-注解的方法就不能提供接口。”
这是我的模块类:
@Module
class MenuActivityModule(@NonNull private val menuActivity: MenuActivity) {
@Provides
@MenuActivityScope
fun provideGameScreenDimensions(application: Application) =
GameScreenDimension(application.resources)
@Provides
@MenuActivityScope
fun provideAudio() =
AndroidAudio(menuActivity)
@Provides
@MenuActivityScope
fun providePowerManager() =
menuActivity.getSystemService(Context.POWER_SERVICE) as PowerManager
@Provides
@MenuActivityScope
fun provideWakeLock(@NonNull powerManager: PowerManager) =
powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Preferences.APPLICATION_TAG)
}
This is a part of my Activity class, where I inject some variables with Dagger:
class MenuActivity : BaseActivity {
@Inject
lateinit var myAudio: Audio
@Inject
lateinit var wakeLock: PowerManager.WakeLock
@Inject
lateinit var apiService : ApiService
@Inject
lateinit var sharedPref : SharedPreferences
@Inject
lateinit var gameDimension : GameScreenDimension
init {
DaggerMenuActivityComponent.builder()
.menuActivityModule(MenuActivityModule(this))
.build()
.inject(this)
}
//more code
}
Audio.kt 是接口,Dagger 有问题注入它。在活动模块内,我正在返回 AndroidAudio 实例,它实现了音频接口。我不确定这里有什么问题。在 Java 中,我曾多次注入接口,但以前从未遇到过这个问题。 如果有人可以帮助我,我会很高兴。 谢谢!
【问题讨论】: