Middle+
Pověz o anotacích Dagger @Provides a @Binds
sobes.tech AI
Odpověď od AI
Anotace @Provides se používá v modulech k určení metod, které vytvářejí instance závislostí. Tyto metody jsou označeny @Provides a vracejí typ závislosti, kterou poskytují. Tělo metody obsahuje logiku pro vytvoření instance.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Logika tvorby databáze
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
Anotace @Binds se používá v modulech k označení, že jedna rozhraní je spojena s konkrétní implementací. Používá se na abstraktních metodách, které přijímají implementaci jako parametr a vracejí rozhraní. Dagger generuje efektivnější kód pro @Binds ve srovnání s @Provides, protože není potřeba volat metodu pro vytvoření instance.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Hlavní rozdíly:
@Providesse používá k vytváření instancí objektů, často s složitější logikou nebo závislostmi.@Bindsse používá k propojení abstraktních typů (rozhraní) s jejich konkrétními implementacemi, což je efektivnější, pokud není složitá logika tvorby.