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 օգտագործվում է աբստրակտ տիպերը (ինտերֆեյսները) կապելու իրենց կոնկրետ իրագործումների հետ, ինչը ավելի արդյունավետ է, երբ չկա բարդ ստեղծման տրամաբանություն։