Android 匕首柄
Android dagger hilt
我有一个 class NavigationController,它需要一个 activity 实例,我的所有片段都通过这些 activity.
托管
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 因为它没有构造函数我不能注入它
那么我怎样才能得到 activity 并将其传递给我的 NavigationController 呢?
- 如果您的
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)
}
}
我有一个 class NavigationController,它需要一个 activity 实例,我的所有片段都通过这些 activity.
托管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 因为它没有构造函数我不能注入它
那么我怎样才能得到 activity 并将其传递给我的 NavigationController 呢?
- 如果您的
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)
}
}