Sobes.tech
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:

  • @Provides obyekt 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.
  • @Binds abstrakt 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.