@HiltViewModel
class MyViewModel
@Inject constructor(
val mySingleton: MySingletonClass
): ViewModel() {
...
}
您的@Composable函数:
@Composable fun DisplayPrettyScreen() {
...
val viewModel: MyViewModel = hiltViewModel()
val singleton = viewModel.mySingleton //no need to assign it to a local variable, just for explanation purposes
}
2条答案
按热度按时间rvpgvaaj1#
你不应该将依赖注入到一个函数中,这就是@Composable。您可能希望将它们注入到ViewModel或Activity中。
如果您需要访问@Composable中的ViewModel作用域(或Application作用域)单例,则可以将该单例注入ViewModel,然后从@Composable访问ViewModel。
您可以通过在ViewModel hilt模块中将该对象的provider函数注解为@ViewScoped来将该单例注入ViewModel中。
如果你想为整个应用程序使用一个单例,而不是每个ViewModel示例使用一个单例,你可以将提供程序安装到SingletonComponent::类中并将其注解为@Singleton。更多信息在这里。
Hilt模块文件
您的ViewModel类:
您的@Composable函数:
fdbelqdn2#
我也认为这是不可能的,但后来找到了办法。试过了,似乎有效。
定义入口点接口:
DataStoreRepo在Hilt中定义为单例
然后在组合中使用: