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