如何从另一个类而不是Application类开始koin

时间:2019-11-06 13:54:11

标签: android koin

我正在创建一个应用程序作为库。必须在其中集成库的主应用程序具有Application类,因此我无法在我的库应用程序中添加Application类。我发现koin必须从Application类开始。我可以从另一个班级叫startKoin吗?

2 个答案:

答案 0 :(得分:0)

您可以创建自己的KoinApplication,它不共享全局koin上下文。您也不需要在Application类中对此进行初始化。然后可以在您自己的KoinComponent的实现中使用此实例。

您可以在此处找到详细说明:

https://insert-koin.io/docs/2.0/documentation/reference/index.html#_koin_context_isolation

答案 1 :(得分:0)

如果您的目的是将库依赖项注入到您的应用程序中,则可以让您的库公开可从您的应用程序引用并在启动Koin时进行初始化的模块集。

例如:

在库中,有一个公共模块作为libraryModule:

val libraryModule = module{
    single{
        ObjectA()
    }
}

现在,当您将库包含在应用程序模块中时,您可以将其用作:

class MyApplication : Application{

    override fun onCreate() {
        super.onCreate()
        initializeKoinDI()
    }


    private fun initializeKoinDI() {
        startKoin {
            androidContext(this@MyApplication)
            modules(listOf(appModule1, appModule2, libraryModule))
        }
    }
}