# DI без рефлексии и бойлерплейта: магия KSP в действии

Eugen_prog 17 минут назад # DI без рефлексии и бойлерплейта: магия KSP в действии Простой 9 мин 447 Kotlin * Android * Всем привет! Меня зовут Евгений, и я — Android-разработчик.Работая над очередным многомодульным...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: Eugen_prog 17 минут назад # DI без рефлексии и бойлерплейта: магия KSP в действии Простой 9 мин 447 Kotlin * Android * Всем привет! Меня зовут Евгений, и я — Android-разработчик. Работая над очередным многомодульным проектом, я снова и снова сталкивался с неудобством и, не побоюсь этого слова, ужасом настройки Dependency Injection.
И каждый раз я задавался одним и тем же вопросом: почему до сих пор не существует DI-фреймворка, который бы комфортно работал именно в многомодульной среде? Так, чтобы каждый feature-модуль становился по-настоящему независимым. “Но ведь есть Dagger!
Технические детали
Но, на мой взгляд, он не делает модули по-настоящему независимыми. Чтобы все заработало, вам все равно нужно создавать компонент в главном :app модуле, который связывает все зависимости вместе. А это значит, что каждый feature-модуль неявно зависит от общей конфигурации и не является полностью автономным.
(Сейчас я знаю, что у Dagger есть Subcomponents, а у Koin — изолированные Koin-инстансы! Но на момент ресерча я этого не нашёл. )Недавно передо мной встала еще более интересная задача: сделать модуль/библиотеку, которая будет собираться и подключаться зависимостью к нескольким совершенно разным проектам.
И тут же возник главный вопрос: как быть с Dependency Injection? Совсем без него не хотелось — это сложно, больно, нарушает все законы физики и вообще не по фэншую. Можно было бы взять Koin, но это значит навязать его всем, кто будет использовать мою библиотеку.
Отраслевые последствия
Это плохой подход, ведь мы не можем заставлять другие проекты переходить на наш DI-фреймворк. Но главная техническая проблема глубже. Все популярные DI-фреймворки (Dagger, Hilt, Koin) стартуют из класса Application.
Этого класса нет в обычном Android-модуле, а значит, у библиотеки нет своей точки для инициализации DI. Попытка же запустить в одном приложении второй, отдельный DI-контейнер — один для приложения, другой для библиотеки — неизбежно приведет к крэшу. Так и родилась идея: а что, если написать свой DI?
Я сформулировал для себя несколько ключевых требований к будущему инструменту:Он не должен зависеть от класса Application. Он должен позволять каждому модулю или библиотеке работать со своим, полностью независимым DI-контейнером. Он должен требовать минимум ручных объявлений зависимостей.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





