为什么在 Jetpack Compose 中使用 Hilt 作为依赖注入时不能自动创建 ViewModel 对象?

Why can't the ViewModel object be created automatically when I use Hilt as Dependency Injection in Jetpack Compose?

以下代码A来自官方样本project.

该项目使用 Hilt 作为依赖注入。

在我看来,我不需要自己创建 ViewModel 对象,因为 Hilt 会自动创建它。

但是在代码A中,好像viewModel: MainViewModel = viewModel()必须手动创建,为什么?

代码A

@OptIn(ExperimentalMaterialApi::class)
@Composable
fun CraneHomeContent(
    onExploreItemClicked: OnExploreItemClicked,
    openDrawer: () -> Unit,
    modifier: Modifier = Modifier,
    viewModel: MainViewModel = viewModel(),
) {

   ...
}



@HiltViewModel
class MainViewModel @Inject constructor(
    private val destinationsRepository: DestinationsRepository,
    @DefaultDispatcher private val defaultDispatcher: CoroutineDispatcher
) : ViewModel() {

   ...
}


@HiltAndroidApp
class CraneApplication : Application()

通过手动创建,我的意思是调用视图模型构造函数。而这在Hilt上是没有实践的,因为你必须把所有的注入都传递下去。

您不能只声明 viewModel: MainViewModel 参数,因为那样您必须从调用视图传递它。

viewModel() 为您完成所有注入魔法。此外,如果视图模型已经存在,将返回相同的对象。所以它是完全自动的。