dagger2 在哪里存储作用域实例?

Where dagger2 stores scoped instances?

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

Factory then saved in component as provider.

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

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

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

DoubleCheck 中的 get 实现然后恰好调用委托 Provider 一次并存储结果。每次后续调用 get returns 先前存储的实例。