Dmitry
10/10/2023, 2:30 AMDmitry
10/10/2023, 2:31 AMoverride val loginManager: LoginManager
get() = run<LoginManager> {
lateinit var loginManager: LoginManager
loginManager.also {
loginManager = it
}
}
Dmitry
10/10/2023, 2:33 AM@Component
@ACustomScope
abstract class SomeComponent : SomeInterface {
...
abstract val loginManager: LoginManager
...
}
Dmitry
10/10/2023, 2:34 AM@ACustomScope
@Inject
class LoginManager(
... a bunch of parameters, all provided in SomeInterface or injected themselves ...
)
Dmitry
10/10/2023, 2:35 AMDmitry
10/10/2023, 2:39 AMevant
10/10/2023, 4:27 AMevant
10/10/2023, 4:29 AMDmitry
10/10/2023, 10:53 PMimport me.tatarka.inject.annotations.Component
import me.tatarka.inject.annotations.Inject
import me.tatarka.inject.annotations.Scope
@Scope
annotation class CustomScope
@CustomScope
@Component
abstract class BaseComponent {
abstract val foo: Foo
abstract val bar: Bar
}
@CustomScope
@Inject
class Foo(
val lazy: Lazy<Bar>,
val real: Bar,
)
@Inject
class Bar(
val foo: Lazy<Foo>
)
generates
import kotlin.reflect.KClass
import me.tatarka.inject.`internal`.LazyMap
import me.tatarka.inject.`internal`.ScopedComponent
public fun KClass<BaseComponent>.create(): BaseComponent = InjectBaseComponent()
public class InjectBaseComponent() : BaseComponent(), ScopedComponent {
override val _scoped: LazyMap = LazyMap()
override val foo: Foo
get() = run<Foo> {
lateinit var foo: Foo
foo.also {
foo = it
}
}
override val bar: Bar
get() = Bar(
foo = lazy {
foo
}
)
}
Dmitry
10/10/2023, 10:54 PM