我要把DI从KOIN迁移到Dagger Hilt我有一个带有许多实现的定制接口,我希望将useCase中的所有实例作为列表注入.

例如:

@Singleton
class MyUseCaseImpl @Inject constructor(
    private val myInterfaces: List<MyInterface>,
) : MyUseCase {
    ...
}

当我使用KOIN时,我会这样做:

single<MyUseCase> {
    MyUseCaseImpl(
        myInterfaces = getKoin().getAll(),
    )
}

我怎么才能对希尔特做同样的事情呢?

我已经将每个实现与我的接口绑定,如下所示:

@Binds
abstract fun bindFirstMyInterfaceImpl(
    firstMyInterfaceImpl: FirstMyInterfaceImpl,
): MyInterface

推荐答案

你需要multibindings美元.为您的依赖项提供@IntoSet注释

@Binds
@IntoSet
abstract fun bindFirstMyInterfaceImpl(
    impl: FirstMyInterfaceImpl1,
): MyInterface

@Binds
@IntoSet
abstract fun bindSecondMyInterfaceImpl(
    impl: SecondMyInterfaceImpl,
): MyInterface

但使用Set(或Map)而不是List个多绑定

@Singleton
class MyUseCaseImpl @Inject constructor(
    private val myInterfaces: Set<@JvmSuppressWildcards MyInterface>,
) : MyUseCase {
    ...
}

Android相关问答推荐

如何将Hilt添加到Android Studio中的Kotlin项目中?

安卓喷气背包组成倒计时动画

如何在Android中打印到命令行

Jetpack Compose:带芯片的Textfield

Play Google上发布的一款应用的房间数据库迁移

如何用帆布在喷气背包中画一个圆环?

在Android中使用Room从SQlite数据库中获取实体列表的正确方式是什么?

Jetpack Compose X.dp 性能问题?

在 AGP 8.0 中构建失败,无法应用插件realm-android. APIandroid.registerTransform已删除

如何在 Jetpack Compose 中创建无限pager

未找到 com.android.tools.build:gradle:7.4.0 的匹配变体

单击过go 的文章时 NewsApp 崩溃

如何在jetpack compose中通过lamda返回columnScope/RowScope

如何在 Android Jetpack compose 中为列表初始填充设置动画

删除项目时延迟列不更新

有人可以向我解释这两个结果有什么区别吗?

如何在jetpack compose中创建自定义rememberState?

Android WebView 没有在第一次页面完成时从本地存储读取数据?

线圈单元测试 - 如何做到这一点?

可组合的 fillMaxSize 和旋转不起作用