我有一个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 我知道匕首不知道如何创建MainActivity,因为它没有构造函数,我无法注入
那么我如何获得活动并将其传递给我的NavigationController?
答案 0 :(得分:0)
NavigationModule
依赖于Activity
,则说明您将其安装在错误的component
上。您应该使用@InstallIn(ActivityComponent::class)
。Activity
范围(=== ActivityComponent
)内,Hilt可以提供Activity
的实例作为依赖项。它无法提供您确切的MainActivity
的实例。 很难仅通过代码示例来判断,这是否可以满足您的需求,但是您可以简单地摆脱:@InstallIn(ActivityComponent::class)
@Module
object NavigationModule {
@Provides
fun providesNavigationModule(activity: Activity): NavigationController {
return NavigationController(activity)
}
}