我一直在研究 Dagger 2 中的自定义作用域(this 和 this 是我试图将我的代码作为基础的那些),有一件事我似乎仍然无法理解,我看到您可以创建一个具有自定义作用域的组件,然后该组件包含的模块中的所有提供物都将与组件具有相同的作用域(组件中的单例)或非作用域,每次都会返回新实例你得到一个。
但是,我仍然不明白的是,如果你有一个用户范围,然后你有一些模块绑定(bind)到该范围,假设你的网络组件绑定(bind)到它,以便网络调用使用当前用户信息,如果您在 Activity 生命周期中注销用户(或登录用户),它是否会更改您当前标记为 @Inject 的对象引用?或者在 Activity onCreate 方法中调用 .inject(this) 时得到的任何实例? 或者您应该再调用一次注入(inject)以便再次映射引用?
非常感谢您对此事的任何帮助:)
最佳答案
tl;dr 您必须自己管理一切。没有刷新,您必须重新创建或至少重新加载部分 Activity 。
作用域提供一些编译时信息并帮助您保持代码“可读”。要实际交换组件,您必须自己做。是的,您必须围绕此构建您的设计,相应地重新创建依赖组件。
如果用户登录/注销,您将必须创建一个新的 UserModule
和引用新用户的组件,提供登录/注销对象。这是您需要为依赖于它的所有 future 组件引用的新组件。
@Inject
注释的字段不会自动刷新,尽管您可以向相同的字段注入(inject)第二次,对象将被覆盖。
在第二个link you provided他们实际上确实实现了某种交换用户信息的功能。这是通过在应用程序类中保留 UserComponent
来完成的。
关于android - Dagger 2 的作用域可以比 Activity 生命周期短吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34515191/