Dagger不生成子组件创建方法

Ove*_*ass 1 java android dependency-injection kotlin dagger-2

我使用的是 dagger 2.24,没有 dagger-android。我的组件设置如下:

@Singleton
@Component(modules = [
    FirebaseModule::class,
    ViewModelFactoryModule::class,
    DispatcherModule::class,
    NetworkModule::class
])
interface AppComponent {

    fun getSignInComponent(): SignInComponent

    fun getMapComponent(): MapComponent

    // some other subcomponent creation methods

    fun getNewMeetingComponent(): NewMeetingComponent // THIS method is not implemented by DaggerAppComponent

    @Component.Factory
    interface Factory {

        fun create(
                @BindsInstance context: Context
                // some other dependencies
        ): AppComponent
    }
}

/////////////////////////////////////////////////////////////////////

@ViewScope
@Subcomponent(modules = [NewMeetingModule::class])
interface NewMeetingComponent {

    fun inject(newMeetingActivity: NewMeetingActivity)
}
Run Code Online (Sandbox Code Playgroud)

发生的情况是 dagger 生成所有子组件创建方法,如下所示:

@Override
public SignInComponent getSignInComponent() {
    return new SignInComponentImpl();
}
Run Code Online (Sandbox Code Playgroud)

根本不生成任何实现fun getNewMeetingComponent(): NewMeetingComponent。这确实很奇怪,因为其他子组件之间没有概念上的差异。

构建失败并显示一条简单消息

@Singleton
@Component(modules = [
    FirebaseModule::class,
    ViewModelFactoryModule::class,
    DispatcherModule::class,
    NetworkModule::class
])
interface AppComponent {

    fun getSignInComponent(): SignInComponent

    fun getMapComponent(): MapComponent

    // some other subcomponent creation methods

    fun getNewMeetingComponent(): NewMeetingComponent // THIS method is not implemented by DaggerAppComponent

    @Component.Factory
    interface Factory {

        fun create(
                @BindsInstance context: Context
                // some other dependencies
        ): AppComponent
    }
}

/////////////////////////////////////////////////////////////////////

@ViewScope
@Subcomponent(modules = [NewMeetingModule::class])
interface NewMeetingComponent {

    fun inject(newMeetingActivity: NewMeetingActivity)
}
Run Code Online (Sandbox Code Playgroud)

使用--stacktrace选项运行会产生以下堆栈跟踪:

@Override
public SignInComponent getSignInComponent() {
    return new SignInComponentImpl();
}
Run Code Online (Sandbox Code Playgroud)

这里可能有什么问题?

Ove*_*ass 9

答案很简单。我把它NewMeetingComponent放入一个名为“new”的包中。我忘记了,就 java 而言,它不是一个有效的包名称。要么 Android Studio 没有显示警告,要么我出于某种原因放弃了它。