首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Dagger-Hilt忽略@Provides方法

Android Dagger-Hilt忽略@Provides方法
EN

Stack Overflow用户
提问于 2021-09-13 23:04:52
回答 1查看 750关注 0票数 2

我有一个NetworkModule和一个RepositoryModule。在我的NetworkModule中,我有创建翻新服务实例的方法(也有创建okHttpClientgson的方法,但这些方法与此无关):

代码语言:javascript
复制
@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

代码语言:javascript
复制
@Module
@InstallIn(SingletonComponent::class)
object RepositoryModule {

    @Singleton
    @Provides
    fun provideLoginRepository(
        userMessage: MutableLiveData<Message>,
        apiService: ApiService
    ): LoginRepository {
        return LoginRepositoryImpl(userMessage, apiService)
    }
}

当我试图构建它时,我会得到以下错误:

代码语言:javascript
复制
error: [Dagger/MissingBinding] LoginRepository cannot be provided without an @Provides-annotated method.

起初,存储库似乎无法注入,但我已经将其指向ApiService,因为如果我从provideLoginRepository方法参数中删除它,它将成功构建。

我试着解决这个问题已经有好几个小时了,我几乎什么都试过了。如果有人知道这是怎么回事,我会很高兴的。提前谢谢。

编辑:在ApiService函数中创建provideLoginRepository实例使一切正常工作,应用程序成功构建,这不是所需的修复方法:

代码语言:javascript
复制
@Singleton
@Provides
fun provideLoginRepository(
    userMessage: MutableLiveData<Message>,
    retrofit: Retrofit
): LoginRepository {
    return LoginRepositoryImpl(userMessage, retrofit.create(ApiService::class.java))
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-14 18:51:41

我已经解决了这个问题。结果表明,java不支持包名中的interface (与kotlin相反)。你猜怎么着,ApiService在一个叫做interface的包里。重命名包后,一切都按预期工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69169977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档