Sobes.tech
Назад к вопросам
Junior — Middle
81

Чем отличается механизм Binds от Provides в контексте dependency injection или модульных систем?

Компании, где спрашивали
GrowFood
Viasat tech
ЯндексЯндекс

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

sobes.tech AI

В контексте dependency injection (например, Dagger в Android) аннотации @Provides и @Binds служат для разных целей, хотя обе используются для предоставления зависимостей.

  • @Provides используется для методов, которые создают и возвращают конкретный экземпляр объекта. Обычно это метод с телом, где можно написать логику создания объекта.

  • @Binds применяется для связывания интерфейса с его реализацией без создания нового экземпляра. Метод с @Binds должен быть абстрактным и просто возвращать реализацию интерфейса, переданную в параметре.

Пример:

@Module
abstract class NetworkModule {
    @Binds
    abstract fun bindApiService(impl: ApiServiceImpl): ApiService
}

@Module
class DatabaseModule {
    @Provides
    fun provideDatabase(): Database {
        return DatabaseImpl()
    }
}

Таким образом, @Binds эффективнее и проще, когда нужно просто указать, что интерфейс реализуется конкретным классом, а @Provides — когда нужна логика создания объекта.