如何在 koin 中将接口作为参数传递

How to pass an interface as parameter in koin

我是 koin 的新手。

我有一个名为“MesheRepoImpl”的方法,它获取一个接口作为参数。

我知道我不能将接口传递给 Koin 中的方法,所以我创建了一个 class 并从接口扩展了它,然后我在 koin 模块中添加了 class,所以我使用 class 作为 MesheRepoImpl 的参数。

但是 android studio 给我这个错误:

原因:org.koin.core.error.NoBeanDefFoundException:|- 未找到 class:'com.app.meshe.data.repo.MesheRepo' 的定义。检查您的定义!

这是我的 Di 模块:

val mesheModule =
    module {
        single { getInstance(androidContext()) }
        single { MesheLocalDataSource() } //*
        single { MesheRepoImpl(get()) } //**
        factory { TaskViewModelFactory(get()) }
        viewModel { TaskViewModel(get()) }
        viewModel { RewardViewModel(get()) }
        viewModel {MainViewModel()}
    }

1星线是我从接口延伸出来的class,2星线是获取接口作为参数的class

如果我不能使用 class,如何将接口作为参数传递?

既然还没有答案,我建议你考虑一下

interface MesheRepo
class MeshoRepoImpl(): MeshoRepo

超过你的

interface MesheRepo
class MeshoRepoImpl(val IRepo: MeshoRepo)

所以,只需实施 MeshoRepo 而不是将其作为参数传递给 MeshoRepoImpl

尝试直接回答您的问题,您可以在 Koin 模块中定义接口并传递它们,但您还必须提供它们的实现:

val mesheModule = module {
  single<MeshoRepo> { MeshoRepoImpl() }
  single { MeshoRepoImpl(get()) } // <-- it's like a deadlock, so I still do not see any sense to pass an interface over implementing it
}

请不要忘记接口不是对象。