我可以在Dagger2中重新创建托管依赖项吗?

时间:2016-03-13 19:32:49

标签: android dagger-2

我考虑在应用程序范围内提供Singleton GoogleApiClient的可能性。多个活动和片段需要客户端,并且有很多样板代码。

如果注入的依赖项进入我需要将其丢弃并创建新的状态,我该怎么办?

我遇到过GoogleApiClient抛出IllegalStateException的真实案例。这是非常罕见的,但在这一点上,reconnect()没有帮助。恢复的唯一方法是建立与API客户端的新连接(使用GoogleApiClient.Builder)。

2 个答案:

答案 0 :(得分:2)

您可以使用提供程序注入来指示每次需要依赖项时必须运行某些代码。 user guide(向下滚动到标题"提供者注入和#34;)中包含对此的概述。然后,您实现并注入一个知道如何检索GoogleApiClient的已知工作实例的Provider

这里的诀窍在于我认为您的Provider的具体实现需要某种方式来指示它所持有的对象不再有效并且应该重新创建。因此,当您检测到存在问题时,您将最终必须将其强制转换为具体类型并调用另一种方法来告诉它发生了什么。或者找一些其他方法来指导提供者逻辑从坏对象中恢复。

答案 1 :(得分:0)

如果不重新创建组件的实例,则无法指示需要刷新作用域的依赖项。如果没有必要在注射部位之间共享GoogleApiClient,那么将其展开为无范围。如果是,那么您需要做一些hacky并自行管理isDirty配置并将此信息传递给模块。但我不会推荐这样的东西。