Jerry Preissler
05/30/2023, 6:56 PMimport org.koin.dsl.module
class Presenter(val a : String, val b : String)
val presenterModule = module {
single { params -> Presenter(a = params.get(), b = params.get()) }
}
and
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.extension.RegisterExtension
import org.koin.core.component.inject
import org.koin.core.parameter.parametersOf
import org.koin.test.KoinTest
import org.koin.test.junit5.KoinTestExtension
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class KoinExploration : KoinTest {
@JvmField
@RegisterExtension
@Suppress("unused")
val koinTestExtension = KoinTestExtension.create {
modules(
presenterModule
)
}
@Test
fun parameterTest() {
val a = "bar"
val b = "foo"
val presenter : Presenter by inject { parametersOf(a, b) }
println("Result: ${presenter.a} ${presenter.b}")
}
}
I expected to get "Result: bar foo" but instead I got "Result: bar bar".
Can anyone shed some light here?Zacarias
05/30/2023, 7:14 PMResolving injected parameters in order
Instead of using get() to resovle a parameter, if you have several parameters of the same type you can use the index as follow get(index) (also same as [ ] operator):
Łukasz Nowakowski
05/30/2023, 7:17 PMval presenterModule = module {
single { (a: String, b: String) ->
Presenter(a = get { parametersOf(a) }, b = get { parametersOf(b) })
}
}
Replace with this, it should workarnaud.giuliani
05/31/2023, 6:23 AMarnaud.giuliani
05/31/2023, 6:23 AM