需要ViewModel Provider Factory

问题描述 投票:1回答:1

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

android android-viewmodel android-mvvm
1个回答
1
投票

没有什么能阻止你用ViewModel关键字创建new对象。基本上,当没有提供构造函数参数时,这就是Factory Provider在内部执行的操作,但是还有其他功能。例如生命周期管理。 ViewModel专门与生命周期结构(如片段和活动)相关联。当事情变得足够复杂时,您需要对象工厂进行依赖关系管理。

对于你给出的简单例子

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

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

val vm = MyViewModel(repo=MyRepository())

如果MyRepository轮流可能依赖于Retrofit,Room DataBase,Shared Preference等等。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.