我想知道为什么构造函数中具有不同参数的ViewModel需要一个ViewModel Provider Factory。为什么无法使用常规构造函数new MyViewModel(parameter1 , parameter2);
答案 0 :(得分:1)
没有什么可以阻止您使用ViewModel
关键字创建new
对象。本质上讲,当没有提供构造函数参数时,这就是Factory Provider在内部执行的操作,但是还存在其他功能。例如生命周期管理。 ViewModel特别与诸如片段和活动之类的生命周期构造相关联。当事情变得非常复杂时,您将需要对象工厂来进行依赖性管理。
对于您给出的简单示例
val vm = MyViewModel(height=10, weight=20)
创建这些身高和体重对象比较容易,因为它们是整数,但是如果它是一个复杂的依赖项,例如
val vm = MyViewModel(repo=MyRepository())
如果MyRepository
依次依赖于翻新,Room数据库,共享首选项等。
现在这是Factory模式起作用的地方。可以使用依赖注入工具(例如Dagger)轻松自动生成工厂模式。
工厂模式用于复杂的依赖关系提供机制。