Sobes.tech
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 გამოიყენება აბსტრაქტული ტიპების (ინტერფეისების) დაკავშირებისთვის მათ კონკრეტულ რეალიზაციებთან, რაც უფრო ეფექტურია, როდესაც შექმნის რთული ლოგიკა არ არის საჭირო.