在构建基于 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 上下文中存储“帮助程序”然后在创建各种实例时从上下文中检索它来解决这个问题,但这感觉很笨拙和重复。我希望有一种更清洁的方法来解决这个问题。