Middle+
Rozprávaj o anotáciách Dagger @Provides a @Binds
sobes.tech AI
Odpoveď od AI
Anotácia @Provides sa používa v moduloch na definovanie metód, ktoré vytvárajú inštancie závislostí. Tieto metódy sú označené @Provides a vracajú typ závislosti, ktorú poskytujú. V tele metódy sa nachádza logika na vytvorenie inštancie.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Logika na vytvorenie databázy
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
Anotácia @Binds sa používa v moduloch na označenie, že jedna rozhranie je spojená s konkrétnou implementáciou. Používa sa na abstraktných metódach, ktoré prijímajú implementáciu ako parameter a vracajú rozhranie. Dagger generuje efektívnejší kód pre @Binds v porovnaní s @Provides, pretože nie je potrebné volať metódu na vytvorenie inštancie.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Hlavné rozdiely:
@Providessa používa na vytváranie inštancií objektov, často vyžadujúcich zložitejšiu logiku alebo závislosti.@Bindssa používa na prepojenie abstraktných typov (rozhraní) s ich konkrétnymi implementáciami, čo je efektívnejšie, keď nie je zložitá logika tvorby.