我是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
}
}