Sobes.tech
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:

  • @Provides se používá k vytváření instancí objektů, často s složitější logikou nebo závislostmi.
  • @Binds se používá k propojení abstraktních typů (rozhraní) s jejich konkrétními implementacemi, což je efektivnější, pokud není složitá logika tvorby.