首页 > 解决方案 > Dagger 迁移到 Hilt,@ContributesAndroidInjector 无法使用带有 @AndroidEntryPoint 注释的片段

问题描述

尝试逐屏迁移DaggerHilt. 迁移了一个活动,它工作正常,但大多数应用程序活动使用DialogFraments,并且在为 添加注释时没@AndroidEntryPoint问题DialogFragment,但是旧的未迁移活动不能与该片段一起使用,出现运行时错误:

Hilt Fragments must be attached to an @AndroidEntryPoint Activity. Found: class com......MainActivity

任何想法如何使 DialogFragment 在 Hilt 和 Dagger 活动上一起工作?

在注释MainActivity@AndroidEntryPoint更多的依赖注入错误之后,只有修复我才能看到然后迁移所有活动模块。

有什么更简单的方法可以让它们一起工作,以便可以逐步完成迁移,而不是整个活动模块?

标签: androiddagger-2dagger-hilt

解决方案


Savior ansver is @OptionalInjectand OptionalInjectCheck.wasInjectedByHilt(this)check

这样做的方法是替换:

abstract class BaseDialogFragment : DaggerAppCompatDialogFragment() {
....
}

@AndroidEntryPoint
@OptionalInject
abstract class BaseDialogFragment : AppCompatDialogFragment(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector() = androidInjector


    override fun onAttach(context: Context) {
        super.onAttach(context)
       
        if (!OptionalInjectCheck.wasInjectedByHilt(this)) {
            AndroidSupportInjection.inject(this);
        }

    }
....
}

它适用于新的 Hilt 活动,无需更改旧@ContributesAndroidInjector模式,无需额外更改!


推荐阅读