Обеспечение инъекции для фрагмента AndroidX с Dagger2? - PullRequest
0 голосов
/ 21 ноября 2018

У меня возникли некоторые проблемы при попытке выполнить инъекцию фрагмента AndroidX, и я не уверен, что именно это за проблема, и как ее исправить.Приложение отказывается от сборки, выдавая следующую ошибку:

 error: [Dagger/MissingBinding] java.util.Map<java.lang.Class<? extends androidx.fragment.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends androidx.fragment.app.Fragment>>> cannot be provided without an @Provides-annotated method.

Вот метод для предоставления инъекции во фрагменте:

private fun performDependencyInjection() = AndroidSupportInjection.inject(this)

Родительское действие фрагмента реализует HasSupportFragmentInjector:

class MainActivity : BaseActivity(), MainMVPView, HasSupportFragmentInjector {
    @Inject
    internal lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Fragment>
    ... 
    override fun supportFragmentInjector() = dispatchingAndroidInjector
}

Я совершенно заблудился относительно того, где решить эту ошибку отсюда.Не похоже, что в настоящее время имеется много документации по использованию Dagger2 с AndroidX.

Мне кажется, важно отметить, что я включил AndroidX и Jetifier через gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Однако после очистки и перестройки проекта ничего не изменилось.

Как правильно выполнить инъекцию фрагмента AndroidX с помощью Dagger2?

Редактировать: Для записи этона Dagger 2 версии 2.19.Если я переключаюсь на использование 2.16, все работает нормально.

1 Ответ

0 голосов
/ 21 ноября 2018

Это связано с несоответствием в источниках Jetifier , как видно из приведенного ниже кода:

# Androidx compatible dagger
{
    "from": { "groupId": "com.google.dagger", "artifactId": "dagger-android-processor", "version": "2.16" },
    "to": { "groupId": "com.google.dagger", "artifactId": "dagger-android-processor", "version": "2.16" }
}

Из примечания к выпуску кинжала-2.19:

В следующем выпуске (2.20) мы удалим старый формат.Это позволит нам лучше поддерживать пакеты AndroidX.

Так что сейчас вы должны придерживаться версии 2.16 или дождаться выпуска 2.20.

...