android - 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);
两者都达到了目的,但我没有得到最好的,为什么?
解决方案
您没有显示单个选项来初始化视图模型。每种方式都有优点和缺点。当你想在一个activity或者一个fragment中引入带有inject构造函数的viewmodel时,我们有两个问题,首先,在通常的实现过程中,每次屏幕旋转都会重新创建模型,其次,默认情况下,ViewModelProviders不支持任何构造函数带参数。
所以你需要创建自己的模型提供者,并在活动中实现它。
推荐阅读
- angular - 获取 Angular5 中的 1 个对象的值
- ruby-on-rails - 未编译其他资产
- php - 使用 Codeigniter URI 路由提交表单不起作用
- python - 带有倒置 Q 对象的 WHERE 子句中的子查询
- python - python numpy (v1.15.0) 无法拟合抛物线
- python-3.x - 为什么我不能将长度 == 1 的字节串转换为字符?
- android - 如何在 BottomNavigationView 中显示不带色调的菜单项图标
- python-2.7 - put_item() 得到了一个意外的关键字参数 'ConditionExpression'
- directory - 特定子文件夹检查
- c++ - C ++为具有引用成员变量的类创建复制构造函数