Назад к вопросам
Middle+
158
questionbank

Расскажи про аннотации Dagger @Provides и @Binds

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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 используется для связывания абстрактных типов (интерфейсов) с их конкретными реализациями, что эффективнее при отсутствии сложной логики создания.