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