Middle+
გააზიარეთ Dagger @Provides და @Binds ანოტაციების შესახებ
sobes.tech AI
პასუხი AI-სგან
@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გამოიყენება აბსტრაქტული ტიპების (ინტერფეისების) დაკავშირებისთვის მათ კონკრეტულ რეალიზაციებთან, რაც უფრო ეფექტურია, როდესაც შექმნის რთული ლოგიკა არ არის საჭირო.