【问题标题】:Android dagger hilt安卓匕首
【发布时间】:2026-01-22 08:15:01
【问题描述】:

我有一个类 NavigationController,它需要一个活动实例,我的所有片段都通过这些活动托管。

class NavigationController constructor(private val activity: MainActivity) {
    
    fun navigateToAuth() {
        activity.supportFragmentManager
            .beginTransaction()
            .replace(R.id.main_container,WelcomeFrag())
            .commitAllowingStateLoss()
    }
}

这是我的 NavigationModule

@InstallIn(ApplicationComponent::class)

@Module
object NavigationModule {
    @Provides
    fun providesNavigationModule(activity: MainActivity): NavigationController {
        return NavigationController(activity)
    }
}

但我收到错误,因为无法提供 MainActivity 需要 @Inject 或 @Provides 我知道 dagger 不知道如何创建 MainActivity 因为它没有构造函数我无法注入它

那么我怎样才能获得活动并将其传递给我的 NavigationController 呢?

【问题讨论】:

    标签: android dependencies code-injection dagger dagger-hilt


    【解决方案1】:
    1. 如果您的NavigationModule 依赖于Activity,那么您将其安装在错误的component 中。你应该使用@InstallIn(ActivityComponent::class)
    2. Activity 范围内(===ActivityComponent) Hilt 可以提供Activity 的实例作为依赖项。它无法提供您确切的MainActivity 的实例。 仅从您的代码示例很难判断这是否可以满足您的需求,但您可能会简单地逃脱:
    @InstallIn(ActivityComponent::class)
    @Module
    object NavigationModule {
        @Provides
        fun providesNavigationModule(activity: Activity): NavigationController {
            return NavigationController(activity)
        }
    }
    

    【讨论】:

    • 谢谢。它起作用了,我只是将参数更改为 Activity 并转换为 MainActivity,因为我的应用程序只有一个主 Activity