Executando verificação de segurança...
1

Cara, eu fiquei com algumas dúvidas, provavelmente porque eu conheço muito pouco de Kotlin, mas acho que você pode me ajudar a esclarecer algumas coisas.

A princípio, me parece que o ponto principal da solução pra lidar com dependências cíclicas é na verdade esse lateinit, uma vez que ele trabalha com essa semântica da gente não precisar inicializar esses caras na construção do objeto, tanto que, eu fiz um teste aqui com o playground do Kotlin, fazendo DI "manual" (sem container automático), e dá certo, se liga:

class A {
    lateinit var b: B
    
    fun foo() {
        b.bar();
    }
    
    fun bar() {
        println("A!");
    }
}

class B {
    lateinit var a: A
    
    fun foo() {
        a.bar();
    }
    
    fun bar() {
        println("B!");
    }
}


fun main() {
    val a = A();
    val b = B();
    
    a.b = b;
    b.a = a;
    
    a.foo();
    b.foo();
}

Daí eu queria saber aonde entram os providers nessa história e, como seria uma implementação barebones deles.

Carregando publicação patrocinada...
1

O lateinit apenas diz que uma val nao nula vai ser inicializada em algum momento. Já o provider funciona como uma inicializacao lazy.

manualmente tu consegue controlar qual tu esta instanciando primeiro mas nem sempre tu consegue ou sabe qual vai ser instanciado primeiro (como ao usar uma lib de DI)