Kotlin 新手,尝试迁移到一个用 Java 编写的小型 Android 项目。不知道如何处理此错误:
Caused by: java.lang.IllegalStateException:
com.mydomain.example.dagger.BusModule must be set
> at com.mydomain.example.dagger.DaggerAppComponent$Builder.build(DaggerAppComponent.java:87)
> at com.mydomain.example.MyApplication.buildComponent(MyApplication.kt:29)
> at com.mydomain.example.MyApplication.onCreate(MyApplication.kt:17)
> at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1118)
> at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5791)
这是 BusModule
类:
@Module
object BusModule {
const val PROVIDER_FRAGMENT_SELECTION = "fragment_selection"
@Provides
@Singleton
@Named(PROVIDER_FRAGMENT_SELECTION)
fun provideNewFragmentSelection(): PublishSubject<String> {
return PublishSubject.create()
}
}
这是 AppComponent 类:
@Component(modules = [(AppModule::class), (DataModule::class), (BusModule::class)])
@Singleton
interface AppComponent {
@get:Named(BusModule.PROVIDER_FRAGMENT_SELECTION)
val selectedFragmentName: PublishSubject<String>
fun inject(mainActivity: MainActivity)
}
最后是应用类:
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
appComponent = buildComponent()
}
private fun buildComponent(): AppComponent {
return DaggerAppComponent.builder().build()
}
companion object {
var appComponent: AppComponent? = null
private set
}
}
无法弄清楚错误消息的含义。 BusModule 是如何不“设置”的?谢谢!
最佳答案
BusModule
应该是一个类而不是对象,const val PROVIDER_FRAGMENT_SELECTION
应该移动到类的companion object
。所以模块变成:
@Module
class BusModule {
companion object {
const val PROVIDER_FRAGMENT_SELECTION = "fragment_selection"
}
@Provides
@Singleton
@Named(PROVIDER_FRAGMENT_SELECTION)
fun provideNewFragmentSelection(): PublishSubject<String> {
return PublishSubject.create()
}
}
关于android - 未设置 Kotlin Dagger 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50284294/