gpt4 book ai didi

kotlin - 如何使用 Koin 创建具有运行时依赖项的实例?

转载 作者:行者123 更新时间:2023-12-02 13:22:24 27 4
gpt4 key购买 nike

在构建基于 Kotlin 的 HTTP 服务器时,我正在尝试使用 Koin。

我正在使用一个框架,您可以在其中通过扩展一些框架提供的抽象类来编写您想要的行为,并在组件生命周期的各个点填写您的实现逻辑(类似于 Android)。在组件生命周期的某个时刻,特定于框架的资源(公开为字段)被初始化并可供使用。

我的问题是我需要这个字段来创建从我的 Koin 模块返回的实例。

我想做的是这样的:

interface MyInteractor

class MyComponent : FrameworkComponent(), KoinComponent {
// "helper" is a field local to this class and used as
// an injection parameter
private val myInteractor: MyInteractor by inject { parametersOf(helper) }

private val myModule = module {
single<MyInteractor> { (helper: FrameworkField) ->
// return an instance of MyInteractor using "helper"
}
}

// lifecycle method
override fun start() {
startKoin(listOf(myModule))
}
}

尽管“助手”直到组件生命周期的后期才被初始化,但上述内容不起作用。

我设法通过在 Koin 上下文中存储“帮助器”,然后在创建各种实例时从上下文中检索它来解决这个问题,但这感觉很笨拙和重复。我希望有一种更清洁的方法来解决这个问题。

最佳答案

当然有

在您的模块中,定义您的模块,如下所示,

 single { (args: Array<Any>) -> SignInViewModel(args[0] as SignInCallback) }

然后在您的事件中,传递如下参数值,
val signInModel by inject<SignInViewModel>(parameters = getDefinitionParams(this@SignInFragment))

和 getDefinitionParams() 像这样
 fun getDefinitionParams(vararg any: Any) : ParameterDefinition{
return object : ParameterDefinition {
override fun invoke() = parametersOf(any)
}
}

希望这有帮助,快乐编码:D

关于kotlin - 如何使用 Koin 创建具有运行时依赖项的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53173682/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com