android - 未设置 Kotlin Dagger 模块

标签 android kotlin dagger-2

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/

相关文章:

guava - Guava TreeMultimap的Kotlin类型推断失败

Android 库、Kotlin 和 Dagger2

android - View 的 getHeight() 在 Android 中为纵向和横向提供相同的结果

java - smoothScrollTo(position) 滚动到底部而不是 RecyclerView 中的目标位置

Android gradle 删除日志

kotlin - Kotlin-循环中的销毁不起作用-无法访问var

android - 如何像这样注入(inject)网络模块?

android - 如果子组件与其中一个父组件存在冲突,Dagger 不会抛出异常

安卓 : Soft Keyboard covering edit text up (adjustresize or adjustpan doesnt work)

java - 我无法将 Android 应用程序安装到手机上