首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Architecture组件示例GithubBrowserSample: ViewModelModule、ViewModel参数

理解Architecture组件示例GithubBrowserSample: ViewModelModule、ViewModel参数
EN

Stack Overflow用户
提问于 2017-09-18 11:38:11
回答 1查看 2.2K关注 0票数 18

涉及Architecture组件的最新示例之一是谷歌提供的GithubBrowserSample。我审查了守则,并提出了几个问题:

  1. 我注意到ViewModelModule包含在AppModule中。这意味着所有视图模型都被添加到DI图中。为什么要这样做,而不是为每个活动/片段提供只为特定活动/片段提供所需的Module
  2. 在这个特定的示例中,在使用GithubViewModelFactory实例化视图模型的情况下,是否有任何方法将参数传递给特定的ViewModel?或者更好的解决方案是在ViewModel中创建一个setter,并通过setter设置所需的param?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-18 13:37:52

  1. ..。这意味着所有视图模型都被添加到DI图中。为什么这样做,而不是对每个活动/片段有单独的模块.

它们被添加到DI图中,但尚未创建。相反,它们最终出现在提供者的地图中,如在ViewModelFacory中看到

代码语言:javascript
复制
@Inject
public GithubViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) { }

因此,我们现在有了一个GithubViewModelFactory,它有一个提供程序列表,可以创建任何绑定的ViewModel。片段和活动现在只需注入工厂并检索它们的ViewModel。

代码语言:javascript
复制
@Inject
ViewModelProvider.Factory viewModelFactory;

// ...later...
repoViewModel = ViewModelProviders.of(this, viewModelFactory).get(RepoViewModel.class);

对于why...alternatively,您可以为每个活动/片段创建一个ViewModelProvider.Factory,并在每个模块中注册实现。不过,这将是许多重复的样板代码。

  1. 在这个特定的示例中,在使用GithubViewModelFactory实例化视图模型的情况下,是否有任何方法将参数传递给特定的ViewModel?或者更好的解决方案是在ViewModel中创建一个setter,并通过setter设置所需的param?

似乎所有的ViewModels都只依赖于@Singleton对象--这是必要的,因为它们都是从AppComponent提供的。这意味着除了其他@Singleton依赖项之外,没有其他传递“参数”的方法。

因此,正如您所建议的,您必须将工厂移到活动/片段组件中,以便提供范围更低的依赖关系,或者使用setter方法。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46278357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档