Hilt将ActivityComponent依赖项注入ViewModel



我是Hilt的新手,有基本问题。

输入数据:我有一个AppNavigator,它在引擎盖下使用了NavController

class AppNavigatorImpl @Inject constructor(
private val activity: FragmentActivity
) : AppNavigator {
private val navController: NavController by lazy {
val navigationFragment = activity.supportFragmentManager.findFragmentById(R.id.main_navigation_fragment) as NavHostFragment
navigationFragment.navController
}
override fun navigate(payload: NavigationPayload) {
when (payload) {
is NavigationPayload.DeepLink -> {
navController.navigate(payload.link.toUri())
}
}
}
}

我创建了ActivityComponent导航模块:

@Module
@InstallIn(ActivityComponent::class)
abstract class NavigationModule {
@Binds
abstract fun bindAppNavigator(impl: AppNavigatorImpl): AppNavigator
}

我想做这个:

@HiltViewModel
class LocationViewModel @Inject constructor(
private val appNavigator: AppNavigator
) : ViewModel() {
fun navigateToPurchase() {
appNavigator.navigate(NavigationPayload.DeepLink("some_deep_link"))
}
}

我得到了一个编译错误:

[Dagger/MissingBinding]com.wul.cassistant.domain_common.navigation.AppNavigator如果没有@Providers注释方法,则无法提供

据我所知,之所以会发生这种情况,是因为AppNavigator依赖项是ActivityComponent,而不是ViewModelComponent。

有没有任何方法可以使这个AppNavigator在";漂亮的方式">

您需要添加一个函数来提供FragmentActivity。你确定要将活动作为依赖项添加到你的类中吗?

@Module
@InstallIn(ActivityComponent::class)
class MyFragmentActivityModule {
@Provides
fun provideFragmentActivity(@ActivityContext activity: Context) : FragmentActivity{
return activity as FragmentActivity
} 
}

最新更新