为了账号安全,请及时绑定邮箱和手机立即绑定

Dagger不生成子组件创建方法

Dagger不生成子组件创建方法

翻过高山走不出你 2023-08-09 15:51:46
我使用的是 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 没有显示警告,要么我出于某种原因放弃了它。



查看完整回答
反对 回复 2023-08-09
?
慕容708150

TA贡献1831条经验 获得超4个赞

据我所知,您尚未将子组件添加到主组件中。要添加子组件,您需要在subcomponents主组件内的模块参数中指定它。文档中有一个例子

@Module(subcomponents = RequestComponent.class)
class ServerModule {}

其中SererModule是主要组件中包含的模块之一。


查看完整回答
反对 回复 2023-08-09
  • 2 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信