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:
@Providesviene usato per creare istanze di oggetti, spesso con logica più complessa o dipendenze.@Bindsviene usato per collegare tipi astratti (interfacce) alle loro implementazioni concrete, il che è più efficiente quando non c’è logica complessa di creazione.