【问题标题】:Where dagger2 stores scoped instances?dagger2 在哪里存储作用域实例?
【发布时间】:2020-04-07 15:16:37
【问题描述】:

我有带有注解@Singleton 的作用域组件。它需要 DbModule。我查看了生成的类,发现有用于 DbModule 函数的工厂(也有注释 @Singleton)。 Factory 直接使用 DbModule 函数,因此每次调用 get() 工厂的方法时都会提供新实例,并且该实例从未存储。然后工厂作为提供者保存在组件中。那么问题来了,dagger 是如何为同一个作用域提供同一个实例的呢?

【问题讨论】:

    标签: dagger-2


    【解决方案1】:

    工厂然后作为提供者保存在组件中。

    这几乎是真的,但不完全是。生成的组件代码如下所示:

    this.provideDatabaseProvider = DoubleCheck.provider(DbModule_ProvideDatabaseFactory.create());
    

    DoubleCheck.provider 方法返回一个委托给原始提供者的DoubleCheck 实例。这个,而不是原始工厂,保存在组件中。

    DoubleCheck 中的get 实现然后只调用一次委托Provider 并存储结果。对get 的每次后续调用都会返回之前存储的实例。

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      相关资源
      最近更新 更多