使用 Dagger2 为 AndroidX 片段提供注入?
Providing Injection for AndroidX Fragment with Dagger2?
我在尝试向 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.
在Fragment中提供Injection的方法如下:
private fun performDependencyInjection() = AndroidSupportInjection.inject(this)
片段的父级 Activity 实现 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
但是,在清理并重建项目后,什么都没有改变。
使用 Dagger2 向 AndroidX 片段提供注入的正确方法是什么?
编辑:郑重声明,这是在 Dagger 2 2.19 版上进行的。如果我切换到使用 2.16,一切正常。
这是由于 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:
In the next release (2.20), we will remove the old format. This will
allow us to support AndroidX packages better.
所以现在您要么坚持使用 2.16 版,要么等待 2.20 版发布。
我在尝试向 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.
在Fragment中提供Injection的方法如下:
private fun performDependencyInjection() = AndroidSupportInjection.inject(this)
片段的父级 Activity 实现 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
但是,在清理并重建项目后,什么都没有改变。
使用 Dagger2 向 AndroidX 片段提供注入的正确方法是什么?
编辑:郑重声明,这是在 Dagger 2 2.19 版上进行的。如果我切换到使用 2.16,一切正常。
这是由于 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:
In the next release (2.20), we will remove the old format. This will allow us to support AndroidX packages better.
所以现在您要么坚持使用 2.16 版,要么等待 2.20 版发布。