活动和片段的Dagger2和ViewModel

时间:2020-01-21 06:29:51

标签: android dagger-2 android-lifecycle android-mvvm

我正在使用MVVM体系结构学习Dagger2。我有一个问题,我正在阅读一些文档和观看视频。

我知道我们可以减少一些简单的代码,例如单例模式以及我们将在整个应用程序中使用的其他一些代码。

我正在开发一个用于学习目的的应用程序,并且正在使用MVVM和Dagger2。 我的问题是:对于注入视图模型提供程序,我们需要编写太多样板代码以注入视图模型提供程序,并且该代码仅适用于该活动生命周期。我们可以通过简单的代码来实现。为什么我们要使用Dagger2的实际用途是什么?我搜索了它,却没有发现有用的东西。

这是我用dagger2编写的代码:

@Inject
ViewModelProviderFactory providerFactory;

viewModel = ViewModelProviders.of(this,providerFactory).get(AuthViewModel.class);

要注入ViewModelProviderFactory,我需要编写一些样板代码。

这是我的没有dagger2的代码:

 mMainActivityViewModel = ViewModelProviders.of(this).get(MainActivityViewModel.class);

两者都达到了目的,但我没有得到最好的,为什么?

1 个答案:

答案 0 :(得分:0)

您没有显示用于初始化视图模型的单个选项。每种方式都有优点和缺点。 当您想在活动或片段中引入带有注入构造函数的viewmodel时,我们有两个问题,首先,在通常的实现过程中,每次屏幕旋转时都会重新创建模型,其次,默认情况下,ViewModelProviders不支持任何构造函数带有参数。

因此,您需要创建自己的模型提供程序,并在活动中实施它。