Android 如何在dagger 2中生成子组件singleton?

Android 如何在dagger 2中生成子组件singleton?,android,dagger-2,Android,Dagger 2,我想让我的子组件成为一个单体,这样我就可以让登录演示者也成为一个单体。这可能吗 @Singleton @Component(modules = AppModule.class) public interface AppComponent { LoginComponent getLoginComponent(); } @Singleton @Subcomponent(modules = LoginModule.class) public interface LoginComponent

我想让我的子组件成为一个单体,这样我就可以让登录演示者也成为一个单体。这可能吗

@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
    LoginComponent getLoginComponent();
}

@Singleton
@Subcomponent(modules = LoginModule.class)
public interface LoginComponent {
}

public class LoginComponent {
    @Singleton
    LoginPresenter getLoginPresenter();
}

无法创建
@子组件
s
@Singleton


虽然
@Singleton
规范对此有点含糊不清,“Singleton”的标准含义是“每个应用程序一个”。由于
@Subcomponent
是通过组件上的工厂方法创建的,因此单例绑定实例“每个应用程序一个”的唯一方式是,如果单例子组件是单例组件的子组件,并且每个应用程序只调用其工厂方法一次。强制执行该约束实际上是不可能的,因此该模式很可能是bug的来源。

因此,将您的
LoginPresenter
设置为单例。为什么必须从子组件提供它?对我来说,子组件代表一个功能,我希望将所有对象创建都保留在那里。组件和子组件是用于封装绑定图的对象。由这些绑定创建的实例可以选择具有与组件的生命周期相匹配的生命周期,并且与范围注释定义的逻辑概念相关联。因此,您应该使用组件和子组件来建模相关的生命周期(例如Android或Singleton中的应用程序/单例、活动等、服务器中的请求),而不是功能。功能级合成应该使用模块来完成,就像您已经做的那样。如果我使用模块来进行功能级合成,那么我的AppComponent将越来越大,为了组织起见,我希望避免这种情况。但我想你是对的,两个不同的组件不可能有相同的生命周期。我希望这是可能的。你知道这个“限制”最近有没有改变?看起来我现在能做到,但我不确定这是否是个bug(或者我做错了什么),因为我找不到合适的发行说明。如果你能做到,那就是个bug。可以归档吗?即使存在多个
@Subcomponent
实例,在主
@singleton
组件模块中定义的单例实例仍然是单例的,即使在不同的子组件实例中请求它们。我的假设正确吗?