Dagger 2 的瞄准镜可以短于 Activity 寿命吗?
Can Dagger 2 have scopes shorter than an Activity life?
我一直在研究 Dagger 2 中的自定义作用域(this and this 是我试图将我的代码作为基础的那些),但有一件事我似乎仍然无法理解,我看到您可以创建一个具有自定义作用域的组件,然后该组件包含的模块中的所有提供物都将与该组件具有相同的作用域(组件中的单例)或无作用域,这将 return每次获得新实例。
但是,我仍然不明白的是,如果你有一个用户范围,然后你有一些模块绑定到那个范围,假设你的网络组件绑定到它,这样网络调用使用当前用户信息,如果您在 Activity 生命周期中注销用户(或登录用户),它会更改您当前标记为 @Inject 的对象引用吗?或者在 activity onCreate 方法中调用 .inject(this) 时得到的任何实例?
或者您应该再调用一次注入以便再次映射引用?
非常感谢对此事的任何帮助:)
tl;dr 你必须自己管理一切。没有刷新,您必须重新创建或至少重新加载 activity.
的部分内容
范围提供一些编译时信息并帮助您保持代码 "readable"。要实际交换组件,您必须自己做。是的,您必须围绕此构建您的设计,相应地重新创建依赖组件。
如果用户登录/注销,您将必须创建一个新的 UserModule
和引用新用户的组件,提供登录/注销对象。这是您需要为依赖于它的所有未来组件引用的新组件。
@Inject
带注释的字段不会自动刷新,尽管您可以将第二次注入相同的字段,对象只会被覆盖。
在第二个 link you provided 中,他们确实实现了某种交换用户信息的功能。这是通过在应用程序 class.
中保留 UserComponent
来完成的
我一直在研究 Dagger 2 中的自定义作用域(this and this 是我试图将我的代码作为基础的那些),但有一件事我似乎仍然无法理解,我看到您可以创建一个具有自定义作用域的组件,然后该组件包含的模块中的所有提供物都将与该组件具有相同的作用域(组件中的单例)或无作用域,这将 return每次获得新实例。
但是,我仍然不明白的是,如果你有一个用户范围,然后你有一些模块绑定到那个范围,假设你的网络组件绑定到它,这样网络调用使用当前用户信息,如果您在 Activity 生命周期中注销用户(或登录用户),它会更改您当前标记为 @Inject 的对象引用吗?或者在 activity onCreate 方法中调用 .inject(this) 时得到的任何实例? 或者您应该再调用一次注入以便再次映射引用?
非常感谢对此事的任何帮助:)
tl;dr 你必须自己管理一切。没有刷新,您必须重新创建或至少重新加载 activity.
的部分内容范围提供一些编译时信息并帮助您保持代码 "readable"。要实际交换组件,您必须自己做。是的,您必须围绕此构建您的设计,相应地重新创建依赖组件。
如果用户登录/注销,您将必须创建一个新的 UserModule
和引用新用户的组件,提供登录/注销对象。这是您需要为依赖于它的所有未来组件引用的新组件。
@Inject
带注释的字段不会自动刷新,尽管您可以将第二次注入相同的字段,对象只会被覆盖。
在第二个 link you provided 中,他们确实实现了某种交换用户信息的功能。这是通过在应用程序 class.
中保留UserComponent
来完成的