Middle+
Opowiedz o adnotacjach Dagger @Provides i @Binds
sobes.tech AI
Odpowiedź od AI
Adnotacja @Provides jest używana w modułach do definiowania metod tworzących instancje zależności. Metody te oznaczone są @Provides i zwracają typ zależności, którą dostarczają. W ciele metody znajduje się logika tworzenia instancji.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Logika tworzenia bazy danych
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
Adnotacja @Binds jest używana w modułach do wskazania, że jedna interfejs jest powiązany z konkretną implementacją. Dotyczy to metod abstrakcyjnych, które przyjmują implementację jako parametr i zwracają interfejs. Dagger generuje bardziej wydajny kod dla @Binds w porównaniu do @Provides, ponieważ nie wymaga wywołania metody do tworzenia instancji.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Główne różnice:
@Providessłuży do tworzenia instancji obiektów, często wymagających bardziej skomplikowanej logiki lub zależności.@Bindssłuży do powiązania abstrakcyjnych typów (interfejsów) z ich konkretnymi implementacjami, co jest bardziej wydajne, gdy nie ma skomplikowanej logiki tworzenia.