使用Dagger2为AndroidX片段注入?

jos*_*ill 6 android android-fragments dagger-2 androidx

我在尝试为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.
Run Code Online (Sandbox Code Playgroud)

这是在片段中提供注入的方法:

private fun performDependencyInjection() = AndroidSupportInjection.inject(this)
Run Code Online (Sandbox Code Playgroud)

片段的父Activity实现了HasSupportFragmentInjector:

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

我完全迷失在哪里从这里解决这个错误.似乎没有太多关于在AndroidX中使用Dagger2的文档.

我觉得重要的是要注意我通过gradle.properties启用了AndroidX和Jetifier:

android.useAndroidX=true
android.enableJetifier=true
Run Code Online (Sandbox Code Playgroud)

但是,在清理和重建项目之后,没有任何改变.

使用Dagger2为AndroidX片段提供注入的正确方法是什么?

编辑:对于记录,这是在Dagger 2版本2.19上.如果我切换到使用2.16,一切正常.

Ben*_*min 4

这是由于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" }
}
Run Code Online (Sandbox Code Playgroud)

来自dagger-2.19 的发行说明:

在下一个版本(2.20)中,我们将删除旧格式。这将使我们能够更好地支持 AndroidX 软件包。

因此,目前您要么必须坚持使用 2.16 版本,要么等待 2.20 版本。