Kotlin 如何使用Koin创建具有运行时依赖关系的实例?

Kotlin 如何使用Koin创建具有运行时依赖关系的实例?,kotlin,koin,Kotlin,Koin,在构建基于Kotlin的HTTP服务器时,我正在试验Koin 我使用的是一个框架,在这个框架中,您可以通过扩展一些框架提供的抽象类来编写所需的行为,并在组件生命周期的各个点(类似于Android)填充您的实现逻辑。在组件生命周期的某个时刻,特定于框架的资源(作为字段公开)将被初始化并可供使用 我的问题是,我需要这个字段来创建从Koin模块返回的实例 我想做的是这样的: interface MyInteractor class MyComponent : FrameworkComponent()

在构建基于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))
    }
}
接口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)
        }
    }