Middle+
Dagger @Provides və @Binds anotasiya haqqında danış
sobes.tech Süni İntellekt
AI-dan cavab
@Provides qeydi modullarda asılılıqları yaratmaq üçün metodları müəyyən etmək üçün istifadə olunur. Bu metodlar @Provides ilə işarələnmiş və təmin etdikləri asılılıq növünü geri qaytarır. Metodun bədənində nümunənin yaradılması loqikası yerləşir.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Verilənlər bazasının yaradılması loqikası
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
@Binds qeydi modullarda bir interfeysin konkret bir tətbiqi ilə əlaqələndirildiyini göstərmək üçün istifadə olunur. Bu, tətbiq edən və interfeysi geri qaytaran abstrakt metodlara tətbiq edilir. Dagger @Binds üçün daha səmərəli kod yaradır, çünki nümunənin yaradılması üçün metod çağırışına ehtiyac yoxdur.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Əsas fərqlər:
@Providesobyekt nümunələrinin yaradılması üçün istifadə olunur, çox vaxt daha mürəkkəb loqika və ya asılılıqlar tələb edir.@Bindsabstrakt tipləri (interfeyslər) onların konkret tətbiqləri ilə əlaqələndirmək üçün istifadə olunur və mürəkkəb yaradılma loqikasının olmadığı zaman daha səmərəlidir.