我在尝试向一个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,一切正常。