我正在创建一个多模块 Android 应用程序,其中包含干净的架构层作为模块:
root >
app (main module)
presentation (android lib module) //it has dependency on domain in build.gradle
domain (android lib module)
data (android lib module) //it has dependency on domain in build.gradle
Domain 模块具有 UseCase 和 Repository 接口,例如:
package com.cleanarchitecturesample.domain.usecase.user
class SaveUserUseCase @Inject constructor(
private val repository: UserCredentialsRepository,
@IO private val dispatcher: CoroutineDispatcher
) {
...
}
package com.cleanarchitecturesample.domain.respository
interface UserCredentialsRepository {
...
}
Repository及其di的实现被放置在Data模块中,数据源如下:
package com.cleanarchitecturesample.data.repoimpl
import com.cleanarchitecturesample.data.source.local.UserCredentialsLDS
import com.cleanarchitecturesample.domain.respository.UserCredentialsRepository
class UserCredentialsRepositoryImpl(
private val userCredentialsLDS: UserCredentialsLDS
) : UserCredentialsRepository {
...
}
package com.cleanarchitecturesample.data.di
import com.cleanarchitecturesample.data.repoimpl.UserCredentialsRepositoryImpl
import com.cleanarchitecturesample.data.source.local.UserCredentialsLDS
import com.cleanarchitecturesample.domain.respository.UserCredentialsRepository
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object RepositoryModule {
@Singleton
@Provides
fun provideUserCredentialsRepository(
userCredentialsLDS: UserCredentialsLDS
): UserCredentialsRepository = UserCredentialsRepositoryImpl(userCredentialsLDS)
}
一切似乎都很好,但我仍然收到以下错误:
/AndroidStudioProjects/CleanArchitectureSample/app/build/ generated/hilt/component_sources/debug/com/cleanarchitecturesample/app/CleanArchitectureApp_HiltComponents.java:137: 错误:[匕首/缺少绑定] com.cleanarchitecturesample.domain.respository.UserCredentialsRepository 如果没有 @Provides 注释的方法,则无法提供。 民众 抽象静态类 SingletonC 实现 CleanArchitectureApp_GenerateInjector, ^ com.cleanarchitecturesample.domain.respository.UserCredentialsRepository 注射于 com.cleanarchitecturesample.domain.usecase.user.IsValidUserCredentialsUseCase(存储库, ……) com.cleanarchitecturesample.domain.usecase.user.IsValidUserCredentialsUseCase 注射于 com.cleanarchitecturesample.presentation.vm.UserAuthenticationVM(..., isValidUserCredentialsUseCase,...) com.cleanarchitecturesample.presentation.vm.UserAuthenticationVM 被注入 com.cleanarchitecturesample.presentation.vm.UserAuthenticationVM_HiltModules.BindsModule.binds(arg0) @dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map
> 请求于 dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [com.cleanarchitecturesample.app.CleanArchitectureApp_HiltComponents.SingletonC → com.cleanarchitecturesample.app.CleanArchitectureApp_HiltComponents.ActivityRetainedC → com.cleanarchitecturesample.app.CleanArchitectureApp_HiltComponents.ViewModelC] 还要求: com.cleanarchitecturesample.domain.usecase.user.SaveUserUseCase(存储库, …)
Note: I have also tried di for Repository using the abstract class and binds syntax with even that was showing the same error.
如有任何帮助,我们将不胜感激。提前致谢!! :)
添加
data
模块作为 app
模块的依赖项。
Dagger 生成的代码保留在
app
模块中,因此如果您不将 data
模块设置为依赖项,Dagger 将无法访问您的 RepositoryModule