首页 > 解决方案 > 对 ViewModel Provider Factory 的需求

问题描述

我想知道为什么构造函数中具有不同参数的 ViewModel 需要 ViewModel Provider Factory 。为什么不能使用常规构造函数实例化 ViewModelnew MyViewModel(parameter1 , parameter2);

标签: androidandroid-viewmodelandroid-mvvm

解决方案


没有什么能阻止您使用关键字创建ViewModel对象。new本质上,当没有提供构造函数参数时,这就是 Factory Provider 在内部所做的事情,但是还有其他功能围绕着它。例如生命周期管理。ViewModel 特别绑定到生命周期结构,例如片段和活动。当事情变得足够复杂时,您将需要对象工厂来进行依赖管理。

对于您给出的简单示例

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

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

val vm = MyViewModel(repo=MyRepository())

如果MyRepository反过来可能依赖于改造,房间数据库,共享偏好..等

现在这就是工厂模式发挥作用的地方。使用 Dagger 等依赖注入工具可以轻松地自动生成工厂模式。

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


推荐阅读