Ответ
Dependency Injection (DI) помогает управлять зависимостями между компонентами приложения, делая код более модульным, тестируемым и поддерживаемым. Вместо жесткого создания объектов внутри классов, зависимости передаются извне (через конструктор, методы или поля).
Пример с Dagger/Hilt:
// Без DI
class MyRepository {
private val api = ApiService() // Жесткая зависимость
}
// С DI (Hilt)
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
fun provideApi(): ApiService = ApiService()
}
class MyRepository @Inject constructor(private val api: ApiService) // Зависимость внедрена
Преимущества:
- Упрощает тестирование (можно передавать mock-объекты).
- Уменьшает связанность кода.
- Упрощает замену реализаций (например, для разных сборок).
Популярные библиотеки: Dagger, Hilt, Koin.