Koin如何注入Android活动/ appcompatactivity之外

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Koin如何注入Android活动/ appcompatactivity之外相关的知识,希望对你有一定的参考价值。

Koin是一个新的,轻量级的DI库,可用于android以及独立的kotlin应用程序。

通常你注入这样的依赖:

class SplashScreenActivity : Activity() {

    val sampleClass : SampleClass by inject()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

inject()方法。

但是如果在活动上下文不可用的地方(例如活动之外)注入东西呢?

答案

KoinComponent来救援。在任何课程中你都可以简单地:

class SampleClass : KoinComponent {

    val a : A? by inject()
    val b : B? by inject()
}

扩展KoinComponent可以访问inject()方法。

请记住,通常以通常的方式注入东西就足够了:

class SampleClass(val a : A?, val b: B?)
另一答案

Koin使用KoinComponent界面为此提供了解决方案。例如,如果需要在存储库中获取某些依赖项,则可以简单地实现KoinComponent接口。它使您可以访问各种Koin功能,如get()inject()。仅当您无法重写构造函数以接受依赖项作为构造函数参数时,才使用KoinComponent。

class MyRepository: Repository(), KoinComponent {
  private val myService by inject<MyService>()
}

构造函数注入比这种方法更好。

例如,同样的事情可以通过以下方式实现:

class MyRepository(private val service: MyService): Repository() {
    ...
}

您可以在koin模块中添加用于实例化此类的定义:

val serviceModule = module {
    ...

    factory { MyService() }
}
val repositoryModule = module {
    ...

    factory { MyRepository(get<MyService>()) }
}

以上是关于Koin如何注入Android活动/ appcompatactivity之外的主要内容,如果未能解决你的问题,请参考以下文章

使用 koin 作为 Android 注入工具,真香

使用 koin 作为 Android 注入工具,真香

如何在 Room MVVM 架构中实现 Koin 依赖注入

如何使用 Koin 依赖注入 (Kotlin) 检索与给定类型匹配的所有实例

Android注解三大框架DaggerHilt和Koin有何不同?

如何在 Koin 中提供基类?