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

Ale*_*ndr 2 android dagger-2 mosby

样本方案:

在此输入图像描述

它基于Mosby的例子.我想分享Project之间的对象ProjectFragmentProjectHistoryFragment使用@PerProject范围.

ProjectModule:

@Module
public class ProjectModule {

    private Project project;

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

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

}
Run Code Online (Sandbox Code Playgroud)

ProjectModule并将ProjectComponentProjectFragment每个人创建并分享Project-dependent fragment.尼斯.

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

Dav*_*jak 6

不要更改模块中的值.

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

如果你仍然需要更改项目对象而不重新创建所有内容,那么不要注入Project自己而是注入一些ProjectManager,这也可以实现一些Observable模式来通知你是否Project更改了.这样,您可以修改项目并对更改做出反应.