4

我一直在查看 Dagger 2 中的自定义范围(thisthis是我试图将我的代码作为基础的那些),还有一件事我似乎仍然无法理解,我看到你可以创建一个具有自定义范围的组件,然后该组件包含的模块的所有提供形式将与组件的范围相同(组件中的单例)或无范围的,每次获得一个时都会返回新实例。

但是,我仍然不明白的是,如果你有一个用户范围,然后你有一些模块绑定到该范围,假设你的网络组件与之绑定,以便网络调用使用当前用户信息,如果您在 Activity 生命周期中注销用户(或登录用户),是否会更改您当前标记为 @Inject 的对象引用?或者当您在活动 onCreate 方法中调用 .inject(this) 时获得的任何实例?或者您应该再调用一次 inject 以便再次映射引用?

非常感谢您对此事的任何帮助:)

4

1 回答 1

3

tl; dr你必须自己管理一切。没有刷新,您必须重新创建或至少重新加载部分活动。

范围提供了一些编译时间信息并帮助您保持代码“可读”。要实际交换组件,您必须自己做。是的,您必须围绕此构建您的设计,相应地重新创建依赖组件。

如果用户登录/注销,您将必须创建一个UserModule引用新用户的新组件,并提供登录/注销对象。这是您需要为所有未来组件引用的新组件,具体取决于它。

@Inject带注释的字段不会自动刷新,尽管您可以将第二次注入相同的字段,但对象只会被覆盖。

您提供的第二个链接中,他们实际上确实实现了某种交换用户信息。这是通过将 保留UserComponent在应用程序类中来完成的。

于 2015-12-31T11:10:35.220 回答