【问题标题】:Providing Injection for AndroidX Fragment with Dagger2?使用 Dagger2 为 AndroidX 片段提供注入?
【发布时间】:2018-11-21 02:24:18
【问题描述】:

我在尝试向 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)

fragment的父Activity实现了HasSupportFragmentInjector:

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

我完全不知道从哪里解决这个错误。目前似乎没有太多关于在 AndroidX 中使用 Dagger2 的文档。

我确实觉得重要的是要注意我通过以下方式启用了 AndroidX 和 Jetifier gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

但是,在清理和重建项目后,一切都没有改变。

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

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

【问题讨论】:

    标签: android android-fragments dagger-2 androidx


    【解决方案1】:

    这是由于Jetifier sources 不匹配,您可以从以下代码中看到:

    # 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" }
    }
    

    来自dagger-2.19的release note:

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

    所以现在你要么坚持使用 2.16 版,要么等待 2.20 版发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多