Dagger 2:更新范围内提供的对象

时间:2016-05-08 12:50:33

标签: android dagger-2 mosby

示例方案:

enter image description here

它基于Mosby examples。我想在ProjectProjectFragment之间与ProjectHistoryFragment范围分享@PerProject个对象。

ProjectModule:

@Module
public class ProjectModule {

    private Project project;

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

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

}

ProjectModuleProjectComponent将由ProjectFragment创建并分享给每个Project-dependent fragment。好的。

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

1 个答案:

答案 0 :(得分:6)

不要更改模块中的值。

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

如果你仍然需要更改项目 object 而不重新创建所有内容,那么不要注入Project本身,而是注入一些ProjectManager,这也可以实现一些Observable {1}}模式通知您Project是否已更改。这样,您可以修改项目并对更改做出反应。