Skip to content

Commit f3c4f6f

Browse files
Adjust signature for koinInject and propose koinInject with ParametersHolder direct as API to avoid having to unwrap parameters
1 parent c2b6060 commit f3c4f6f

1 file changed

Lines changed: 56 additions & 8 deletions

File tree

  • projects/compose/koin-compose/src/commonMain/kotlin/org/koin/compose

projects/compose/koin-compose/src/commonMain/kotlin/org/koin/compose/Inject.kt

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,72 @@ import org.koin.core.parameter.ParametersHolder
2323
import org.koin.core.qualifier.Qualifier
2424
import org.koin.core.scope.Scope
2525

26+
2627
/**
27-
* Resolve Koin dependency
28+
* Resolve Koin dependency for given Type T
29+
*
30+
* <u>Note</u> this version unwrap parameters to ParametersHolder in order to let remember all parameters
31+
* This parameters unwrap will be triggered on recomposition
2832
*
29-
* @param qualifier
30-
* @param scope - Koin's root default
31-
* @param parameters - injected parameters
33+
* For better performances we advise to use koinInject(Qualifier,Scope,ParametersHolder)
34+
*
35+
* @param qualifier - dependency qualifier
36+
* @param scope - Koin's root by default
37+
* @param parameters - injected parameters (with lambda & parametersOf())
38+
* @return instance of type T
3239
*
3340
* @author Arnaud Giuliani
3441
*/
42+
@Composable
3543
@OptIn(KoinInternalApi::class)
44+
inline fun <reified T> koinInject(
45+
qualifier: Qualifier? = null,
46+
scope: Scope = currentKoinScope(),
47+
noinline parameters: ParametersDefinition,
48+
): T {
49+
val p = parameters.invoke()
50+
return remember(qualifier, scope, p) {
51+
scope.getWithParameters(T::class, qualifier, p)
52+
}
53+
}
54+
55+
/**
56+
* Resolve Koin dependency for given Type T
57+
*
58+
* @param qualifier - dependency qualifier
59+
* @param scope - Koin's root by default
60+
* @param parameters - parameters (used with parametersOf(), no lambda)
61+
* @return instance of type T
62+
*
63+
* @author Arnaud Giuliani
64+
*/
3665
@Composable
66+
@OptIn(KoinInternalApi::class)
3767
inline fun <reified T> koinInject(
3868
qualifier: Qualifier? = null,
3969
scope: Scope = currentKoinScope(),
40-
noinline parameters: ParametersDefinition? = null,
70+
parameters: ParametersHolder,
71+
): T {
72+
return remember(qualifier, scope, parameters) {
73+
scope.getWithParameters(T::class, qualifier, parameters)
74+
}
75+
}
76+
77+
/**
78+
* Resolve Koin dependency for given Type T
79+
*
80+
* @param qualifier - dependency qualifier
81+
* @param scope - Koin's root by default
82+
* @return instance of type T
83+
*
84+
* @author Arnaud Giuliani
85+
*/
86+
@Composable
87+
inline fun <reified T> koinInject(
88+
qualifier: Qualifier? = null,
89+
scope: Scope = currentKoinScope()
4190
): T {
42-
val params: ParametersHolder? = parameters?.invoke()
43-
return remember(qualifier, scope, params) {
44-
scope.getWithParameters(T::class, qualifier,params)
91+
return remember(qualifier, scope) {
92+
scope.get(T::class, qualifier)
4593
}
4694
}

0 commit comments

Comments
 (0)