Sobes.tech
Middle+

Dagger @Provides va @Binds anotatsiyalari haqida gapir

sobes.tech AI

AIdan javob

@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 абстракт турлар (интерфейслар)ни уларнинг аниқ амалга оширишлари билан боғлаш учун қўлланилади, бу мураккаб логика бўлмаган ҳолда самаралироқдир.