首页 > 解决方案 > Android Dagger-Hilt 忽略 @Provides 方法

问题描述

我有一个NetworkModule和一个RepositoryModule。在我的NetworkModule我有创建改造服务实例的方法(也有创建okHttpClientand的方法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 甚至在相关文件中显示它: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))
}

标签: androidkotlindependency-injectionretrofit2dagger-hilt

解决方案


好吧,我已经解决了这个问题。interface事实证明,java在包名中不支持(与 kotlin 不同) 。猜猜看,它ApiService在一个名为interface. 重命名包后,一切都按预期工作。


推荐阅读