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

Android 我可以在Dagger2中重新创建托管依赖项吗?,android,dagger-2,Android,Dagger 2,我正在考虑在应用范围内提供单例GoogleAppClient的可能性。多个活动和片段需要客户端,并且有很多样板代码 如果注入的依赖项进入需要扔掉并创建新依赖项的状态,我该怎么办? 我遇到了一个真实的案例,GoogleAppClient抛出了一个非法状态异常。这种情况非常罕见,但此时,重新连接()没有帮助。恢复的唯一方法是建立到API客户端的新连接(使用GoogleAppClient.Builder)。您可以使用提供程序注入来指示每次需要依赖项时都必须运行某些代码。有关这方面的概述,请参阅(向下滚

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

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


我遇到了一个真实的案例,GoogleAppClient抛出了一个非法状态异常。这种情况非常罕见,但此时,
重新连接()
没有帮助。恢复的唯一方法是建立到API客户端的新连接(使用
GoogleAppClient.Builder
)。

您可以使用提供程序注入来指示每次需要依赖项时都必须运行某些代码。有关这方面的概述,请参阅(向下滚动至标题“提供程序注入”)。然后实现并注入一个知道如何检索GoogleAppClient的已知工作实例的


这里的诀窍是,我认为提供者的具体实现将需要某种方式来向它表明所持有的对象不再有效,应该重新创建。因此,当您检测到问题时,您将不得不将其转换为具体类型并调用另一个方法来告诉它发生了什么。或者找到其他方法来指导提供程序逻辑从坏对象恢复。

如果不重新创建组件实例,则无法指示需要刷新作用域依赖项。如果没有必要跨注入站点共享
GoogleAppClient
,则将其取消范围。如果是,那么您需要做一些有点黑客的事情,自己管理
isDirty
配置,并将此信息传递给模块。但我不推荐这样的产品。

谢谢你给我指点供应商。将需要充分消化这一点,但这看起来很有帮助。您能分享您对此主题的解决方案吗?