Что такое AssistedInject в Dagger

«Что такое AssistedInject в Dagger» — вопрос из категории DI, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

AssistedInject — это дополнение к Dagger, позволяющее внедрять зависимости в объекты, которые создаются не через Dagger напрямую (например, через фабрику или вручную).

Пример:

class MyService @AssistedInject constructor(
    private val dependency: MyDependency,
    @Assisted private val param: String
) {
    @AssistedFactory
    interface Factory {
        fun create(param: String): MyService
    }
}

Как использовать:

  1. Аннотируем параметры конструктора @Assisted.
  2. Создаем фабричный интерфейс с @AssistedFactory.
  3. Dagger сгенерирует реализацию фабрики, которую можно внедрить.

Плюсы:

  • Удобно для объектов, требующих runtime-параметров.
  • Сохраняет преимущества Dagger (проверка зависимостей на этапе компиляции).

Ограничения:

  • Требует dagger-assisted зависимости.
  • Не заменяет полную инъекцию зависимостей.