当前位置: 首页 > 知识库问答 >
问题:

如果没有@Inject构造函数或@提供注释的方法,则无法提供活动|从Dagger2迁移到Hilt

爱炯
2023-03-14

所以我正在尝试将我的整个应用程序从匕首迁移到刀柄,显然我无法注入活动和碎片。

我的活动:

@AndroidEntryPoint()
class MainActivity : AuthorizedFlowActivity<ActivityMainBinding>(), MainActivityUiEventHandler,
MainActivityBottomSheetBehavior,
MainActivityOpenDrawer {

我的片段:

@AndroidEntryPoint
class ProfileFragment : BaseFragment<FragmentCaptainProfileBinding>() {

我的应用程序类:

@HiltAndroidApp
class App : Application() {

像这样注入我的活动:

class SplashActivityNavigatorImpl @Inject constructor(
    splashActivity: SplashActivity,
    private val preferences: JameelPreferences
)

它抛出了这个错误:

error: [Dagger/MissingBinding] com.abc.presentation.main.activities.MainActivity cannot be provided without an @Inject constructor or an @Provides-annotated method. This type supports members injection but cannot be implicitly provided.

项目级成绩:

    classpath "com.google.dagger:hilt-android-gradle-plugin:$libVersion.hiltVersion"

应用级 Gradle(所有 3 个模块):

id("dagger.hilt.android.plugin")        

implementation "com.google.dagger:hilt-android:$libVersion.hiltVersion"
kapt "com.google.dagger:hilt-android-compiler:$libVersion.hiltCompilerVersion"

会不会是我的活动和片段扩展了不能用@ AndroidEntryPoint注释的基,因为它们有类型参数??救命啊!

同样在 dagger2 中,我使用了如下接口:

@Module
abstract class AppActivitiesInjector {

    @ActivityScope
    @ContributesAndroidInjector(modules = [RiderInviteFriendFragmentsInjector::class, RiderInviteActivityModule::class, BaseActivityModule::class])
    abstract fun provideRiderInviteFriendActivity(): RiderInviteFriendActivity

    @ActivityScope
    @ContributesAndroidInjector(modules = [OffersActivityFragmentsInjector::class, OffersActivityModule::class, BaseActivityModule::class])
    abstract fun provideOffersActivity(): OffersActivity

    @ActivityScope
    @ContributesAndroidInjector(modules = [TripsHistoryActivityFragmentsInjector::class, TripsHistoryActivityModule::class, BaseActivityModule::class])
    abstract fun provideTripsActivity(): TripsHistoryActivity

    @ActivityScope
    @ContributesAndroidInjector(modules = [RiderProfileActivityFragmentsInjector::class, RiderProfileActivityModule::class, BaseActivityModule::class])
    abstract fun provideRiderProfileActivity(): RiderProfileActivity

    @ActivityScope
    @ContributesAndroidInjector(modules = [PaymentActivityModule::class, PaymentActivityFragmentsInjector::class, BaseActivityModule::class])
    abstract fun providePaymentActivity(): PaymentActivity
}

它的工作,但柄据说是减少这样的锅炉板?对吗?

谢谢

共有1个答案

孔阳平
2023-03-14

正如错误所说:没有任何东西支持提供活动和片段。入口点注释的意思就是:“在这里注入”。所以dagger会生成一切来支持“片段和活动中需要注入的东西”。你需要以某种方式提供活动。试着检查这些答案:

使用Hilt提供活动实例

如何用刀柄绑定/提供活动或片段?

 类似资料:
  • //模块 //组件 `//预登录Presenter //预物流活动` //在一次创建中 //错误日志 错误:(18,53)错误:找不到符号类DaggerPresentComponent错误:(19,53)错误:找不到符号类DaggerUserLoginComponent错误:(19,10)错误:gorick.gradesprojectandroid.MVP. Presenter. Presente

  • 问题内容: 我正在尝试在我的项目中实现dagger2,但遇到错误“ android.app.Application必须在没有@Inject构造函数或@Provides注释方法的情况下才能提供 ”。 这是我的代码: App.java di / AppModule.java di / AppComponent.java di / TestClassModule.java di / TestClassC

  • 我正试图从这篇中级文章中学习Dagger2,并将RequestQueue作为活动级依赖项传递:https://proandroiddev.com/dagger-2-annotations-binds-contributesandroidinjector-a09e6a57758f我可以很好地创建应用程序组件,但我在ContributesAndroidInjector方面遇到了很多麻烦。应用类别: 应

  • 我是新来的,用匕首。所以,我不能解决这个有什么问题。我只想问在这里解决它。 这是错误: c:\ Users \ MSI \ Documents \ MyAndroidProjects \ movie projects \ App \ build \ generated \ hilt \ component _ sources \ debug \ com \ example \ movie App

  • 我想在我的片段(HomeFragment)中注入一个依赖项(HomeViewModel)。 我有一个类(HomeViewModelImpl)实现了该抽象(HomeViewModel),在这个类中,我当然覆盖了父级的方法。 抽象类(HomeViewModel)是从BaseViewModel扩展而来的抽象类。 BaseViewModel是一个普通的开放类,它从Android生命周期组件的ViewMod

  • 我正试图在我的Android项目中使用Dagger2。首先,我想使用两个组件分别负责注入应用程序范围和活动范围的依赖关系。作为一个基本的参考,我使用了这个答案。 因此,有两种不同的方法来设置组件之间的关系:使用注释和使用参数。 如果使用第一个组件,我的工作正常。但是,当我尝试从注入依赖项时,就会出现以下构建时错误: 错误:com。实例用户界面。活动如果没有@Inject构造函数或@Provides