android - Dagger 2 的作用域可以比 Activity 生命周期短吗?

标签 android dependency-injection dagger-2 custom-scope

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

但是,我仍然不明白的是,如果你有一个用户范围,然后你有一些模块绑定(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/

相关文章:

java - setText() 在适配器内不起作用

Android 应用内购买 - 无法从 onBillingSetupFinished() 事件调用按钮 setText()

design-patterns - 害怕使用依赖注入(inject)框架

angular - 在哪些情况下使用 "provide"和 "useClass"可能有用?

java - Dagger 2 : no injector factory bound for fragment

java - Dagger2 组件注入(inject)多个 Activity

我的应用程序与 Java 7 不兼容的 Android Studio 错误

Azure 触发的 Webjobs 依赖项注入(inject)范围

android - 将 ViewModelProvider.Factory 的提供者注入(inject) esspresso 测试

android - 当我使用自定义 SimpleCursorAdapter 在 ListView 的一行中检查 RadioButton 时,另一行也被检查