Middle+
Beszélj a Dagger @Provides és @Binds annotációkról
sobes.tech MI
Válasz az MI-től
A @Provides annotációt modulokban használják arra, hogy módszereket határozzanak meg, amelyek függőségi példányokat hoznak létre. Ezek a módszerek @Provides-szel vannak ellátva, és visszaadják az általuk biztosított függőségtípust. A módszer törzsében található a példány létrehozásának logikája.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Adatbázis létrehozási logika
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
A @Binds annotáció modulokban arra szolgál, hogy jelezze, egy interfész egy konkrét megvalósításhoz van kötve. Ez absztrakt módszerekre alkalmazható, amelyek a megvalósítást paraméterként veszik át, és az interfészt adják vissza. A Dagger hatékonyabb kódot generál a @Binds-hez képest, mivel nem szükséges metódushívás a példány létrehozásához.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Fő különbségek:
- A
@Providesobjektumpéldányokat hoz létre, gyakran összetettebb logikával vagy függőségekkel. - A
@Bindsabsztrakt típusokat (interfészeket) köt össze konkrét megvalósításukkal, ami hatékonyabb, ha nincs összetett létrehozási logika.