我可能漏掉了什么,但我认为像@Singleton这样的Scope用于定义“作用域生命周期”。
我在一个Android应用中使用Dagger 2(但我认为这个问题与Android无关)。
我有1个模块:
@Module public class MailModule {
@Singleton @Provides public AccountManager providesAccountManager() {
return new AccountManager();
}
@Singleton @Provides public MailProvider providesMailProvider(AccountManager accountManager) {
return new MailProvider(accountManager);
}
}
我有两个不同的组件,它们都是 @Singleton
作用域:
@Singleton
@Component(modules = MailModule.class)
public interface LoginComponent {
public LoginPresenter presenter();
}
@Singleton
@Component(
modules = MailModule.class
)
public interface MenuComponent {
MenuPresenter presenter();
}
无论是 MenuPresenter
还是 LoginPresenter
,它们都有一个带有@Inject
的构造函数。其中,MenuPresenter期望通过参数传入 MailProvider
,而 LoginPresenter则需要一个 AccountManager
。
@Inject public MenuPresenter(MailProvider mailProvider) { ... }
@Inject public LoginPresenter(AccountManager accountManager) { ... }
但是每次我使用组件来创建MenuPresenter
或LoginPresenter
时,我都会得到一个全新的MailProvider
和AccountManager
实例。我认为它们应该在同一作用域内,并且应该是单例模式(在相同作用域内)。
我是否完全理解错误?如何在Dagger 2中定义多个组件的真正单例?
@Application
和LoginComponent的@Activity
范围的应用程序组件,我该怎么办? - sockeqwe@Component(dependencies = ApplicationComponent.class)
中定义,则活动作用域组件将具有应用程序作用域组件的所有依赖项。将带有作用域的组件视为图形和子图形。应用程序组件及其作用域-根图,活动组件及其作用域-根的子图。 - Kirill Boyarshinov@Singleton
作用域是否允许将@Application
依赖项注入到@Activity
作用域中?例如,如果MyPresenter是@Application
作用域,并且我想将其注入到@Activity
作用域的MyActivity中。 - AAverin@Singleton
来实现。 - Kirill Boyarshinov