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

问题描述 投票:0回答:1

我已在范围内的组件上添加了@Singleton批注。它需要DbModule。我偷看了生成的类,发现DbModule函数有一些工厂(也标有@Singleton)。 Factory直接使用DbModule函数,因此每次调用get()工厂的方法时,它都会提供一个新实例,而该实例从不存储。然后,工厂将其另存为提供者。所以问题是匕首如何为相同范围提供相同实例?

dagger-2
1个回答
0
投票

然后将工厂存储为提供程序的组件。

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.