Dagger不生成子组件创建方法

我使用的是 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)

}

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


@Override

public SignInComponent getSignInComponent() {

    return new SignInComponentImpl();

}

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


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


 DaggerAppComponent is not abstract and does not override abstract method getNewMeetingComponent() in AppComponent 


翻过高山走不出你
浏览 125回答 2
2回答

PIPIONE

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

慕容708150

据我所知,您尚未将子组件添加到主组件中。要添加子组件,您需要在subcomponents主组件内的模块参数中指定它。文档中有一个例子@Module(subcomponents = RequestComponent.class) class ServerModule {}其中SererModule是主要组件中包含的模块之一。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java