Sobes.tech
Junior — Middle

Каква е разликата между механизма Binds и Provides в контекста на dependency injection или модулни системи?

sobes.tech AI

Отговор от AI

В контекста на внедряване на зависимости (например, 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 — когато е необходима логика за създаване на обекта.