我使用的是 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 生成所有子组件创建方法,如下所示:@Overridepublic SignInComponent getSignInComponent() { return new SignInComponentImpl();}但根本不生成任何实现fun getNewMeetingComponent(): NewMeetingComponent。这确实很奇怪,因为其他子组件之间没有概念上的差异。构建失败并显示一条简单消息 DaggerAppComponent is not abstract and does not override abstract method getNewMeetingComponent() in AppComponent
2 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
答案很简单。我把它NewMeetingComponent
放入一个名为“new”的包中。我忘记了,就 java 而言,它不是一个有效的包名称。要么 Android Studio 没有显示警告,要么我出于某种原因放弃了它。
慕容708150
TA贡献1831条经验 获得超4个赞
据我所知,您尚未将子组件添加到主组件中。要添加子组件,您需要在subcomponents
主组件内的模块参数中指定它。文档中有一个例子
@Module(subcomponents = RequestComponent.class) class ServerModule {}
其中SererModule
是主要组件中包含的模块之一。
添加回答
举报
0/150
提交
取消