android - Android Dagger-Hilt 忽略 @Provides 方法
问题描述
我有一个NetworkModule
和一个RepositoryModule
。在我的NetworkModule
我有创建改造服务实例的方法(也有创建okHttpClient
and的方法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 只是忽略了它的 Provides 方法NetworkModule
甚至存在。我查看了生成的代码,但找不到提及provideApiService
. Android Studio 也将其标记为未使用。我确信这东西应该可以工作,Android Studio 甚至在相关文件中显示它:
这是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))
}
解决方案
好吧,我已经解决了这个问题。interface
事实证明,java在包名中不支持(与 kotlin 不同) 。猜猜看,它ApiService
在一个名为interface
. 重命名包后,一切都按预期工作。
推荐阅读
- android - SingleTask 活动在同一个进程中被多次创建
- sql - SQL 查询联接 4 个表
- flutter - 如何防止图表中的 setState() 上的指标点消失
- html - 所需的模板驱动表单允许空字符串 - Angular 7/8
- xamarin.forms - Xamarin 表单自定义内容视图(复合控件)隐式样式错误
- selenium-webdriver - 将 translate() 函数用于 xpath 不区分大小写时的混淆
- python - 我怎样才能创建泛型类?
- amazon-web-services - EKS 上的 NFS 连接超时
- java - 将空/空白页添加到 PdfDocument java
- alfresco - 在 Alfresco Community 5.2 上使用自定义 webscript 上传文件大小限制