我正在使用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);
两者都达到了目的,但我没有得到最好的,为什么?
您没有显示单个选项来初始化视图模型。每种方式都有优点和缺点。当您想在活动或片段中引入带有注入构造函数的viewmodel时,我们有两个问题,首先,在通常的实现过程中,每次旋转屏幕时都会重新创建模型,其次,默认情况下,ViewModelProviders不支持任何构造函数带有参数。
因此您需要创建自己的模型提供程序,并在活动中实施它。