We currently have 3 modules: App, Api and Core.
App depends on Api and Core.
Api depends on Core.

在我们的核心模块中,我们有一个VersionProvider:

class VersionProvider @Inject constructor(@ApplicationContext context: Context) {
    val versionName = context.packageManager.getPackageInfo(context.packageName, 0).versionName

    val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        context.packageManager.getPackageInfo(context.packageName, 0).longVersionCode
    } else {
        @Suppress("DEPRECATION")
        context.packageManager.getPackageInfo(context.packageName, 0).versionCode
    }
}

它被注入到类中,包括Api模块和App模块.

核心模块刀柄模块的定义如下:

@Module
@InstallIn(SingletonComponent::class)
abstract class CoreModule {

    @Singleton
    @Binds
    abstract fun bindVersionProvider(
        provider: VersionProvider
    ): VersionProvider
}

在编译时,我们收到以下错误:

C:\Code\xxx\app\build\generated\hilt\component_sources\development\com\xxx\App_HiltComponents.java:200: 错误:[Dagger/DependencyCycle]找到一个依赖循环: 公共 抽象静态类SingletonC实现App_GeneratedInjector, ^ com.xxx.core.VersionProvider在 com.xxx.core.hilt.CoreModule.bindVersionProvider(provider) com.xxx.core.VersionProvider在 com.xxx.core.hilt.CoreModule.bindVersionProvider(provider) ... 通过以下方式请求循环: com.xxx.core.VersionProvider在 com.xxx.api.core.hilt.ApiClientModule.bindNetworkManager(�,versionProvider) com.xxx.api.services.helpers.INetworkManager被注入到 com.xxx.api.core.hilt.ApiClientModule.bindInventoryApi(networkManager) 在以下位置注入com.xxx.api.services.inventory.InventoryApi: com.xxx.api.services.inventory.InventoryService(api,�) 在以下位置注入com.xxx.api.services.inventory.InventoryService com.xxx.api.core.hilt.ServiceModule.bindInventoryService(服务) com.xxx.api.services.inventory.IInventoryService在 com.xxx.managers.inventory.InventoryManager(inventoryService,�) 在以下位置注入com.xxx.managers.inventory.InventoryManager com.xxx.core.hilt.ManagerModule.bindInventoryManager(管理器) com.xxx.managers.inventory.IInventoryManager在 com.xxx.App.inventoryManager com.xxx.应用程序被注入 com.xxx.App_GeneratedInjector.injectApp(com.xxx.App) 以下其他入口点也依赖于它: dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [com.xxx.App_HiltComponents.SingletonC? com.xxx.App_HiltComponents.ActivityRetainedC? com.xxx.App_HiltComponents.ViewModelC] 1错误

在App和API模块中,以相同的方式定义Hilt模块,例如:

@Module
@InstallIn(SingletonComponent::class)
object ApiClientModule {
    @Provides
    @Singleton
    fun bindNetworkManager(
        settings: ISettings,
        versionProvider: VersionProvider
    ): INetworkManager {
        return NetworkManager(settings, versionProvider)
    }
...
}

I think the problem has to do with the fact that VersionProvider is somehow registered mulitple times in the Hilt container as it is referenced both from the App and Api modules.
But I don't know what Hilt configuration I am missing to make it work.
Any clues?

推荐答案

我认为依赖循环发生在CoreModule人中.try 删除此文件:

    @Singleton
    @Binds
    abstract fun bindVersionProvider(
        provider: VersionProvider
    ): VersionProvider

并用@SingletonVersionProvider级进行注释.

Android相关问答推荐

如何将文本相对于喷气背包中的图标垂直居中?

Android Bundle getSerializable(String?):'可序列化?&# 39、被抛弃了在Java中被弃用

在命令行Android应用程序开发中苦苦挣扎

在带有REACT-Native-CLI的开发和生产中使用Firebase的最佳实践

找不到类MultipartBody;的序列化程序

在 Bash 脚本中使用 XMLLINT 解析 XML 单元测试文件,并将其放入数组中以表示成功和失败

React-Native Manifest 合并失败并出现多个错误

我需要在房间数据库中保留旧的自动迁移行吗?

Andorid Studio编译器如何自动为变量editText生成mutableStateOf("")的方法名?

通过 setIntentScanningStrategyEnabled(true) 未检测到信标的 Android Beacon 库后台扫描

只能从同一个库组内调用成功(引用groupId=androidx.work from groupId=My Composable)

[Android][Room] 将密封类存储到 Room 数据库中

Android Studio XML 文本在 ConstraintLayout 中不居中

从 Jetpack Compose 中的 IconButton 中删除黑色色调

如何将一个 Composable 作为其参数传递给另一个 Composable 并在 Jetpack Compose 中显示/运行它

如何只允许拖动 BottomSheetScaffold 中 BottomContent 的 SheetPeek 的一部分?

Jetpack compose 未解决的参考错误

删除项目时延迟列不更新

Android Studio xml 预览问题无法初始化编辑器

Android Jetpack Compose - 每次文本字段值更改时,可组合函数都会重新组合