我有一个NetworkModule和一个RepositoryModule。在我的NetworkModule中,我有创建翻新服务实例的方法(也有创建okHttpClient和gson的方法,但这些方法与此无关):
@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
@Singleton
@Provides
fun provideRetrofit(okHttpClient: OkHttpClient, gson: Gson): Retrofit {
return Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl("null")
.client(okHttpClient)
.build()
}
@Singleton
@Provides
fun provideApiService(retrofit: Retrofit): ApiService {
return retrofit.create(ApiService::class.java)
}
}然后,我想在我的ApiService中使用RepositoryModule,但是Hilt忽略了NetworkModule中为它提供的方法甚至是存在的。我查看了生成的代码,但没有发现提到过provideApiService。Android也将其标记为未使用。我确信这件事应该可以用,Android甚至在相关文件中显示了它:

这是NetworkModule
@Module
@InstallIn(SingletonComponent::class)
object RepositoryModule {
@Singleton
@Provides
fun provideLoginRepository(
userMessage: MutableLiveData<Message>,
apiService: ApiService
): LoginRepository {
return LoginRepositoryImpl(userMessage, apiService)
}
}当我试图构建它时,我会得到以下错误:
error: [Dagger/MissingBinding] LoginRepository cannot be provided without an @Provides-annotated method.起初,存储库似乎无法注入,但我已经将其指向ApiService,因为如果我从provideLoginRepository方法参数中删除它,它将成功构建。
我试着解决这个问题已经有好几个小时了,我几乎什么都试过了。如果有人知道这是怎么回事,我会很高兴的。提前谢谢。
编辑:在ApiService函数中创建provideLoginRepository实例使一切正常工作,应用程序成功构建,这不是所需的修复方法:
@Singleton
@Provides
fun provideLoginRepository(
userMessage: MutableLiveData<Message>,
retrofit: Retrofit
): LoginRepository {
return LoginRepositoryImpl(userMessage, retrofit.create(ApiService::class.java))
}发布于 2021-09-14 18:51:41
我已经解决了这个问题。结果表明,java不支持包名中的interface (与kotlin相反)。你猜怎么着,ApiService在一个叫做interface的包里。重命名包后,一切都按预期工作。
https://stackoverflow.com/questions/69169977
复制相似问题