需要一个 ViewModel Provider Factory
The need for a ViewModel Provider Factory
我想知道为什么构造函数中具有不同参数的 ViewModel 需要一个 ViewModel Provider Factory 。为什么不能使用常规构造函数实例化 ViewModel new MyViewModel(parameter1 , parameter2);
没有什么能阻止您使用 new
关键字创建 ViewModel
对象。本质上,当没有提供构造函数参数时,这就是 Factory Provider 在内部所做的,但是围绕它还有其他功能。例如生命周期管理。 ViewModel 特别与生命周期构造相关联,例如 Fragments 和 Activity。当事情变得足够复杂时,您将需要对象工厂来进行依赖管理。
对于您给出的简单示例
val vm = MyViewModel(height=10, weight=20)
创建这些身高和体重对象更容易,因为它们是整数,但如果它是一个复杂的依赖关系,例如
val vm = MyViewModel(repo=MyRepository())
如果 MyRepository
又可能依赖于 Retrofit、Room DataBase、Shared Preference 等
这就是工厂模式发挥作用的地方。可以使用 Dagger 等依赖注入工具轻松自动生成工厂模式。
工厂模式用于复杂的依赖提供机制。
我想知道为什么构造函数中具有不同参数的 ViewModel 需要一个 ViewModel Provider Factory 。为什么不能使用常规构造函数实例化 ViewModel new MyViewModel(parameter1 , parameter2);
没有什么能阻止您使用 new
关键字创建 ViewModel
对象。本质上,当没有提供构造函数参数时,这就是 Factory Provider 在内部所做的,但是围绕它还有其他功能。例如生命周期管理。 ViewModel 特别与生命周期构造相关联,例如 Fragments 和 Activity。当事情变得足够复杂时,您将需要对象工厂来进行依赖管理。
对于您给出的简单示例
val vm = MyViewModel(height=10, weight=20)
创建这些身高和体重对象更容易,因为它们是整数,但如果它是一个复杂的依赖关系,例如
val vm = MyViewModel(repo=MyRepository())
如果 MyRepository
又可能依赖于 Retrofit、Room DataBase、Shared Preference 等
这就是工厂模式发挥作用的地方。可以使用 Dagger 等依赖注入工具轻松自动生成工厂模式。
工厂模式用于复杂的依赖提供机制。