使用Dagger2为AndroidX Fragment提供依赖注入?

6

我在尝试向一个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 中提供注入的方法:
```java public class MyFragment extends Fragment {
@Inject MyDependency myDependency;
@Override public void onAttach(Context context) { super.onAttach(context); ((MyApplication) getActivity().getApplication()).getAppComponent().inject(this); }
} ```
请注意,您需要确保在 `MyApplication` 中设置了正确的依赖项注入组件。
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的文档。

需要注意的是,我已经通过gradle.properties启用了AndroidX和Jetifier:

android.useAndroidX=true
android.enableJetifier=true

然而,即使进行了项目的清理和重建,也没有任何变化。

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

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

1个回答

4
由于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 的发布说明中:

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

因此,现在你要么坚持使用2.16版本,要么等待2.20版本的发布。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接