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 үчүн натыйжалуу код түзөт, анткени экземпляр түзүү үчүн методду чакыруунун кереги жок.

@Module
interface AppBindsModule {

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

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

Негизги айырмачылыктар:

  • @Provides объекттердин үлгүлөрүн түзүү үчүн колдонулат, көбүнчө татаал логика же көзкарандылыктар талап кылынат.
  • @Binds абстракттуу түрлөрдү (интерфейстерди) алардын конкреттүү ишке ашырылыштары менен байланыштыруу үчүн колдонулат, бул түзүү логикасы татаал болбогондо натыйжалуу.