Sobes.tech
Middle+

Дар бораи нишонаҳои Dagger @Provides ва @Binds гап зан

sobes.tech AI

Ҷавоб аз AI

Annotations @Provides дархост барои муайян кардани методҳо дар модулҳо истифода мешавад, ки намунаҳои вобастагиро месозанд. Ин методҳо бо @Provides ишора шудаанд ва намудҳои вобастагиро, ки онҳо таъмин мекунанд, бармегардонанд. Дар бадани метод логикаи сохтани намуна ҷойгир аст.

@Module
class AppModule {

    @Provides
    fun provideDatabase(context: Context): AppDatabase {
        // Логикаи сохтани базаи додаҳо
        return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
    }
}

Аннотацияи @Binds дар модулҳо барои нишон додани он ки як интерфейс бо иҷрои муайян пайваст аст, истифода мешавад. Он ба методҳои абстрактӣ татбиқ мешавад, ки параметри иҷроишро мегиранд ва интерфейсро бармегардонанд. Dagger кодро барои @Binds нисбат ба @Provides самараноктар месозад, зеро барои сохтани намуна занг задан лозим нест.

@Module
interface AppBindsModule {

    @Binds
    fun bindRepository(impl: DefaultRepository): Repository
}

interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }

Тафовутҳои асосӣ:

  • @Provides барои сохтани намунаҳои объектҳо истифода мешавад, ки одатан бо логикаи мураккаб ё вобастагиҳо талаб мекунанд.
  • @Binds барои пайваст кардани намудҳои абстрактӣ (интерфейсҳо) бо иҷрои онҳо истифода мешавад, ки дар он ҷо логикаи мураккаб нест, ва самараноктар аст.