Sobes.tech
Middle+

Parla delle annotazioni Dagger @Provides e @Binds

sobes.tech AI

Risposta dell'AI

L’annotazione @Provides viene utilizzata nei moduli per definire metodi che creano istanze di dipendenze. Questi metodi sono contrassegnati con @Provides e restituiscono il tipo di dipendenza che forniscono. Nel corpo del metodo si trova la logica di creazione dell’istanza.

@Module
class AppModule {

    @Provides
    fun provideDatabase(context: Context): AppDatabase {
        // Logica di creazione del database
        return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
    }
}

L’annotazione @Binds viene usata nei moduli per indicare che un’interfaccia è collegata a una implementazione concreta. Si applica a metodi astratti che prendono come parametro l’implementazione e restituiscono l’interfaccia. Dagger genera un codice più efficiente per @Binds rispetto a @Provides, poiché non richiede di chiamare un metodo per creare l’istanza.

@Module
interface AppBindsModule {

    @Binds
    fun bindRepository(impl: DefaultRepository): Repository
}

interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }

Differenze principali:

  • @Provides viene usato per creare istanze di oggetti, spesso con logica più complessa o dipendenze.
  • @Binds viene usato per collegare tipi astratti (interfacce) alle loro implementazioni concrete, il che è più efficiente quando non c’è logica complessa di creazione.