需要ViewModel Provider工厂

时间:2019-04-26 07:04:59

标签: android android-viewmodel android-mvvm

我想知道为什么构造函数中具有不同参数的ViewModel需要一个ViewModel Provider Factory。为什么无法使用常规构造函数new MyViewModel(parameter1 , parameter2);

实例化ViewModel

1 个答案:

答案 0 :(得分:1)

没有什么可以阻止您使用ViewModel关键字创建new对象。本质上讲,当没有提供构造函数参数时,这就是Factory Provider在内部执行的操作,但是还存在其他功能。例如生命周期管理。 ViewModel特别与诸如片段和活动之类的生命周期构造相关联。当事情变得非常复杂时,您将需要对象工厂来进行依赖性管理。

对于您给出的简单示例

val vm = MyViewModel(height=10, weight=20)

创建这些身高和体重对象比较容易,因为它们是整数,但是如果它是一个复杂的依赖项,例如

val vm = MyViewModel(repo=MyRepository())

如果MyRepository依次依赖于翻新,Room数据库,共享首选项等。

现在这是Factory模式起作用的地方。可以使用依赖注入工具(例如Dagger)轻松自动生成工厂模式。

工厂模式用于复杂的依赖关系提供机制。