I probably missed something, but I thought Scopes like @Singleton are used to define "scoped lifecycles".
I use Dagger 2 in an Android app (but I don't think the problem is android related at all).
I have 1 Module:
@Module public class MailModule {
@Singleton @Provides public AccountManager providesAccountManager() {
return new AccountManager();
}
@Singleton @Provides public MailProvider providesMailProvider(AccountManager accountManager) {
return new MailProvider(accountManager);
}
}
I have two different components with @Singleton
scope:
@Singleton
@Component(modules = MailModule.class)
public interface LoginComponent {
public LoginPresenter presenter();
}
@Singleton
@Component(
modules = MailModule.class
)
public interface MenuComponent {
MenuPresenter presenter();
}
Both, MenuPresenter
and LoginPresenter
, have an @Inject
constructor. While MenuPresenter expects MailProvider
as parameter, LoginPresenter takes an AccountManager
:
@Inject public MenuPresenter(MailProvider mailProvider) { ... }
@Inject public LoginPresenter(AccountManager accountManager) { ... }
But every time I use the components to create a MenuPresenter
or LoginPresenter
I get a fresh new instance of MailProvider
and AccountManager
. I thought they were in the same scope and should therefore be kind of singleton (in the same scope).
Did I understand something completely wrong. How do I define a real singleton for multiple components in dagger 2?