我可能错过了一些东西,但我认为像@Singleton 这样的作用域用于定义“作用域生命周期”。
我在 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
and实例AccountManager
。我认为它们在同一范围内,因此应该是一种单例(在同一范围内)。
我是不是完全理解错了。如何在匕首 2 中为多个组件定义一个真正的单例?