Kotlin 如何使用Koin创建具有运行时依赖关系的实例?
在构建基于Kotlin的HTTP服务器时,我正在试验Koin 我使用的是一个框架,在这个框架中,您可以通过扩展一些框架提供的抽象类来编写所需的行为,并在组件生命周期的各个点(类似于Android)填充您的实现逻辑。在组件生命周期的某个时刻,特定于框架的资源(作为字段公开)将被初始化并可供使用 我的问题是,我需要这个字段来创建从Koin模块返回的实例 我想做的是这样的:Kotlin 如何使用Koin创建具有运行时依赖关系的实例?,kotlin,koin,Kotlin,Koin,在构建基于Kotlin的HTTP服务器时,我正在试验Koin 我使用的是一个框架,在这个框架中,您可以通过扩展一些框架提供的抽象类来编写所需的行为,并在组件生命周期的各个点(类似于Android)填充您的实现逻辑。在组件生命周期的某个时刻,特定于框架的资源(作为字段公开)将被初始化并可供使用 我的问题是,我需要这个字段来创建从Koin模块返回的实例 我想做的是这样的: interface MyInteractor class MyComponent : FrameworkComponent()
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))
}
}
接口MyInteractor
类MyComponent:FrameworkComponent(),kocomponent{
//“helper”是此类的本地字段,用作
//注入参数
private val myinteractitor:myinteractitor by inject{parameters sof(helper)}
private val myModule=模块{
单个{(辅助对象:框架字段)->
//使用“helper”返回MyInteractor的实例
}
}
//生命周期法
覆盖有趣的开始(){
startKoin(列表(我的模块))
}
}
不过,上述方法不起作用,因为“助手”直到组件生命周期的后期才初始化
我已经设法解决了这个问题,将“helper”隐藏在Koin上下文中,然后在创建各种实例时从上下文中检索它,但这感觉很笨拙和重复。我希望有一个更干净的方法来解决这个问题。当然有
在您的模块中,定义您的模块,如下所示:
single { (args: Array<Any>) -> SignInViewModel(args[0] as SignInCallback) }
val signInModel by inject<SignInViewModel>(parameters = getDefinitionParams(this@SignInFragment))
希望这是一个有用的、愉快的编码:D如果对您有效,您能将其标记为一个可接受的答案吗?
fun getDefinitionParams(vararg any: Any) : ParameterDefinition{
return object : ParameterDefinition {
override fun invoke() = parametersOf(any)
}
}