2

示例方案:

在此处输入图像描述

它基于Mosby 示例。我想在范围之间共享Project对象。ProjectFragmentProjectHistoryFragment@PerProject

项目模块:

@Module
public class ProjectModule {

    private Project project;

    public ProjectModule(Project project) {
        this.project = project;
    }

    @Provides
    @PerProject
    public Project provideProject() {
        return project;
    }

}

ProjectModule并将ProjectComponentProjectFragment每个Project-dependent fragment. 好的。

但有一个问题。如果我需要更新标题Project怎么办?就我而言,Project是没有任何设置器的最终对象。Project只能在 ProjectFragment 中修改,因此我可以更新和重置module's未来注入的值。但我认为这是不好的做法。有人可以提供更好的建议吗?

4

1 回答 1

6

不要更改模块中的值。

一个组件(及其包含的模块)有一组对象,它们会在您需要的地方注入它们。它们被缓存、重用等等。切换一个对象会使您处于不一致的状态
如果您需要更改对象,则使用新模块创建一个新组件。

如果您仍然需要在不重新创建所有内容的情况下更改项目对象,则不要注入Project本身,而是注入 some ProjectManager,这也可以实现一些Observable模式来通知您是否已Project更改。通过这种方式,您可以修改您的项目并对更改做出反应。

于 2016-05-08T17:32:32.050 回答