Middle+
Μίλησε για τις σημάνσεις Dagger @Provides και @Binds
sobes.tech AI
Απάντηση από AI
Η σημείωση @Provides χρησιμοποιείται σε modules για τον ορισμό μεθόδων που δημιουργούν στιγμιότυπα εξαρτήσεων. Αυτές οι μέθοδοι σημειώνονται με @Provides και επιστρέφουν τον τύπο της εξάρτησης που παρέχουν. Το σώμα της μεθόδου περιέχει τη λογική δημιουργίας του στιγμιότυπου.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Λογική δημιουργίας βάσης δεδομένων
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
Η σημείωση @Binds χρησιμοποιείται σε modules για να δηλώσει ότι μια διεπαφή συνδέεται με μια συγκεκριμένη υλοποίηση. Εφαρμόζεται σε αφηρημένες μεθόδους που λαμβάνουν ως παράμετρο την υλοποίηση και επιστρέφουν τη διεπαφή. Ο Dagger παράγει πιο αποδοτικό κώδικα για το @Binds σε σύγκριση με το @Provides, καθώς δεν απαιτείται κλήση μεθόδου για τη δημιουργία του στιγμιότυπου.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Βασικές διαφορές:
- Το
@Providesχρησιμοποιείται για τη δημιουργία αντικειμένων, συχνά με πιο πολύπλοκη λογική ή εξαρτήσεις. - Το
@Bindsχρησιμοποιείται για τη σύνδεση αφηρημένων τύπων (διεπαφές) με τις συγκεκριμένες υλοποιήσεις τους, κάτι που είναι πιο αποδοτικό όταν δεν υπάρχει πολύπλοκη λογική δημιουργίας.