У меня есть объект, созданный функцией приостановки, например:
suspend fun someSuspendFunction(): MyPreciousObject
И мне нужно предоставить его для последующего внедрения с помощью koin, например:
val myModule = module {
single<MyPreciousObject> {
//can call suspend function only from a coroutine or another suspend function
someSuspendFunction()
}
}
Есть идеи, как разрешить такую ситуацию? И помните, что я не могу измениться someSuspendFunction()
P.S. Я использую среду Kotlin JS/WASM, поэтому runBlocking
не существует.
@broot, к сожалению, runBlocking
не существует в KotlinJS (это мой случай)
Один шаблон DI, который я часто использовал, — это объект-держатель, который можно внедрить куда угодно:
class MyPreciousObjectHolder
{
var value: MyPreciousObject? = null
}
Затем действуйте следующим образом:
Однако я не эксперт по монетам, поэтому не могу с уверенностью сказать, что это будет работать в этом технологическом стеке.
Полагаю, лучшее, что вы можете получить, — это использовать
runBlocking
. Koin должен хорошо работать с производителем блокирующих объектов, и производительность в этом случае не имеет значения, поскольку это всего лишь инициализация.