完全将Android ViewModel的实现与匕首刀
目前,我有类似的东西:
interface MyViewModel {
val elements: StateFlow<List<MyElements>>
val visible: StateFlow<Boolean>
fun onClick(button: MyElement)
}
@HiltViewModel
class MyViewModelImpl @Inject constructor(
private val myUseCases: MyUseCases,
) : ViewModel(), MyViewModel {
override val elements: StateFlow<List<MyElements>> = myUseCases.getList()
override val visible: MutableStateFlow<Boolean> by lazy { MutableStateFlow(false) }
override fun onClick(button: MyElement) {
myUseCases.click(button)
...
}
}
@Composable
fun MyComposable(
myViewModel: MyViewModel = hiltViewModels<MyViewModelImpl>(),
) { ... }
我想知道是否有某种方法可以将我的合成类完全解脱为我的ViewModel实现类(即删除&lt; myviewModelimpl&gt;
in hiltviewModels()
)。我已经尝试了一些不同的事情,例如将接口作为抽象类和创建@binds
和@provides
Methods in dagger Hilt @module
s,但我似乎无法正确。理想情况下,组合性应该不知道实现ViewModel类,以便我可以将其更改以进行测试等。这将是一个很大的帮助,因为我有几个注入相同的ViewModel接口的组合。
Currently, I have something similar to:
interface MyViewModel {
val elements: StateFlow<List<MyElements>>
val visible: StateFlow<Boolean>
fun onClick(button: MyElement)
}
@HiltViewModel
class MyViewModelImpl @Inject constructor(
private val myUseCases: MyUseCases,
) : ViewModel(), MyViewModel {
override val elements: StateFlow<List<MyElements>> = myUseCases.getList()
override val visible: MutableStateFlow<Boolean> by lazy { MutableStateFlow(false) }
override fun onClick(button: MyElement) {
myUseCases.click(button)
...
}
}
@Composable
fun MyComposable(
myViewModel: MyViewModel = hiltViewModels<MyViewModelImpl>(),
) { ... }
I would like to know if there is some way to completely decouple my Composable from my ViewModel implementation class (i.e. remove the <MyViewModelImpl>
in hiltViewModels()
). I've tried a few different things, such as making the interface an abstract class and creating @Binds
and @Provides
methods in Dagger Hilt @Module
s, but I can't seem to get it right. Ideally, the Composable should have no knowledge of the implementing ViewModel class so that I can change it for testing etc. This would be a big help because I have several composables that inject the same ViewModel interfaces.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论