gpt4 book ai didi

android - 确保 Dagger2 中每个范围只有一个实例

转载 作者:行者123 更新时间:2023-11-30 00:43:38 36 4
gpt4 key购买 nike

所以,我想要完成的是确保我在 Dagger2 中的每个作用域只有一个实例。

默认单例作用域已经可以这样工作了。无论你在多少地方注入(inject)同一个对象,我们都称它为 GlobalInstance,构造它的方法 GlobalInstance provideGlobalInstance() 将被调用一次且仅调用一次。

另一方面,如果我定义自定义作用域,例如 @SessionScope 并且在一些 SessionModule 中,我创建方法 User provideUser() ,该方法(以及因此 new User() 构造函数)将在我注入(inject) User 时被调用多次。无论我是否每次都使用相同的模块实例,我的代码中的每个 @Inject User mUser 都会调用 User provideUser(),导致多个实例,而不是一个范围有限的“单例”。

是否有一些明确的方法来实现它,使用常规的 Dagger api。一种方法是在模块类中使用惰性 getter,但这不是很干净的方法。

最佳答案

请注意,@Singleton 范围在功能上等同于您定义的任何其他自定义范围。

这意味着您可以在 SessionModule 中使用两种类型的 @Provides 方法:

  • @Provides @SessionsScope - 提供“ session 单例”(稍后详细介绍)
  • @Provides - 在每次注入(inject)时提供新对象

请注意,当我们谈论 Dagger 时,术语“单例”有一些歧义,因此我更喜欢使用术语“作用域对象”。当第一次使用 Dagger 注入(inject)作用域对象时,组件会缓存其实例并在同一组件执行的每次后续注入(inject)中返回它。

有关更多信息,您可以阅读这篇文章:Android Dagger 2 Scopes Demistified

关于android - 确保 Dagger2 中每个范围只有一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42158296/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com