Sobes.tech
Junior — Middle

Qual é a diferença entre usar Lazy e Provider no Dagger ao injetar dependências?

sobes.tech IA

Resposta da IA

No Dagger, Lazy e Provider são usados para obter dependências de forma diferida, mas têm características diferentes:

  • Lazy<T> — fornece um objeto do tipo T na primeira chamada a get(), e depois devolve a mesma instância (armazena em cache o resultado). É usado quando se deseja atrasar a criação do objeto até ao seu primeiro uso, garantindo ao mesmo tempo uma única instância.

  • Provider<T> — cria uma nova instância do objeto T a cada chamada a get(). É usado quando se precisa obter um novo objeto a cada vez.

Exemplo:

class MyClass @Inject constructor(
    private val lazyDependency: Lazy<Dependency>,
    private val providerDependency: Provider<Dependency>
) {
    fun useLazy() {
        val instance1 = lazyDependency.get()
        val instance2 = lazyDependency.get() // instance1 == instance2
    }

    fun useProvider() {
        val instance1 = providerDependency.get()
        val instance2 = providerDependency.get() // instance1 != instance2
    }
}