Каква е разликата между механизма 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 — когато е необходима логика за създаване на обекта.