首页 > 解决方案 > Dagger2 和 ViewModels 用于 Activity 和 Fragment

问题描述

我正在使用 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);

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

标签: androiddagger-2android-lifecycleandroid-mvvm

解决方案


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

所以你需要创建自己的模型提供者,并在活动中实现它。


推荐阅读