如何只有一个 Dagger @subcomponent 实例?

How to only have one instance of a Dagger @subcomponent?

对于其他依赖项,我可以使用@scope,例如@Singleton,使其只有一个实例。

例如:

@Component
@Singleton
interface ApplicationComponent {

    fun getMySingleInstanceDependency(): MySingleInstanceDependency
}

@Singleton
class MySingleInstanceDependency @Inject constructor()

如果我向主组件添加一个@subcomponent,它会在每次我需要一个实例时returns一个新实例。我唯一能想到的是使用@Component.Builder 将子组件的实例传递到内部,这样它每次都使用相同的实例,但这听起来不对。有更好的方法吗?

你说的是不同的问题。对象实例的生命周期应该与 subcomponent 无关。让我在这里解释你的问题。

  1. 默认情况下,所有依赖项都是使用您的 provide 注释创建的。每次我们在不同的 Dagger modules 中请求这个项目时都会被调用。 除非 将此特定依赖项注释为singleton

  2. 你的子组件应该与上面的分配无关。 基本上你会有一把(或几把)Dagger component,其中可能包括 subcomponent。它们的生命周期由 Dagger scope 处理。