匕首不能提供注射Kotlin
当我尝试使用Kotlin和Dagger 2时,我有这个问题。
“接口不能提供@提供或@产生注释的方法”。
这是我的Module类:
@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注入它的问题。 在活动模块内部,我正在返回实现Audio接口的AndroidAudio实例。 我不知道这里有什么问题。 在Java中,我曾经多次注入过接口,之前从未遇到过这个问题。 如果有人能帮助我,我会如此快乐。 谢谢!
我认为你的问题的解决方案是非常简单的,也不是很明显,不幸的是。
因为Kotlin不需要在方法返回时指定types,所以可以很容易地写出如下所示的内容:
@Provides @MenuActivityScope fun provideAudio() = AndroidAudio(menuActivity)
编译器不会抱怨,但在这种情况下,Dagger将提供AndroidAudio对象进行注入。 在你的活动你正在寻找注射音频对象。 所以如果你改变这个代码是:
@Provides @MenuActivityScope fun provideAudio(): Audio = AndroidAudio(menuActivity)
一切都应该是ОК。 试试看,如果有什么不行的话。 谢谢。
顺便说一句 :当我用Kotlin使用Dagger的时候,我总是指定返回值的types,因为通常这将是注入variables的types,或者你要在匕首模块中使用的variables的types。
- 为什么我得到@提供注释错误?
- Kotlin androidTest:测试运行完成。 空的测试套件
- 无法转换为org.jetbrains.kotlin.java.model.types.JeClassInitializerExecutableTypeMirror
- @用AndoridInjector和Kotlin在SubComponent中提供方法
- Kotlin + Dagger2:不能提供没有@Inject构造函数或从@提供或@产生注释的方法
- 匕首2构造函数注入与命名参数在kotlin
- 使用Kapt和Dagger2进行注释处理时出错
- 在混合Java / Kotlin项目中使用Dagger 2的Maven配置
- 匕首2在Kotlin未解决的参考DaggerXXXSub