示例方案:
它基于Mosby examples。我想在Project
和ProjectFragment
之间与ProjectHistoryFragment
范围分享@PerProject
个对象。
ProjectModule:
@Module
public class ProjectModule {
private Project project;
public ProjectModule(Project project) {
this.project = project;
}
@Provides
@PerProject
public Project provideProject() {
return project;
}
}
ProjectModule
和ProjectComponent
将由ProjectFragment
创建并分享给每个Project-dependent fragment
。好的。
但是有一个问题。如果我需要更新Project
的标题怎么办?在我的例子中,Project
是一个没有任何setter的最终对象。 Project
只能在ProjectFragment中修改,因此我可以更新并重置module's
值以供将来注入。但我认为这是不好的做法。有人可以给出更好的建议吗?
答案 0 :(得分:6)
不要更改模块中的值。
组件(及其包含的模块)具有一组在您需要的地方注入的对象。它们被缓存,重用等等。 切换对象将使您处于不一致状态 如果您需要更改对象,则使用新模块创建新组件。
如果你仍然需要更改项目 object 而不重新创建所有内容,那么不要注入Project
本身,而是注入一些ProjectManager
,这也可以实现一些Observable
{1}}模式通知您Project
是否已更改。这样,您可以修改项目并对更改做出反应。