Что такое Assisted Factory в Dagger

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

Ответ

Assisted Factory — это механизм в Dagger для создания объектов, которым требуются как зависимости из графа, так и runtime-параметры.

Пример:

class UserRepository @AssistedInject constructor(
    private val api: ApiService,
    @Assisted private val userId: String
) {
    @AssistedFactory
    interface Factory {
        fun create(userId: String): UserRepository
    }
}

Как работает:

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

Использование:

@Inject lateinit var factory: UserRepository.Factory  
val repo = factory.create("123")  

Плюсы:

  • Избавляет от ручного создания фабрик.
  • Сохраняет преимущества Dagger (проверка зависимостей на этапе компиляции).

Альтернатива устаревшему @AssistedInject из dagger.android.