Я, вероятно, что-то пропустил, но я думал, что Scopes, например @Singleton, используется для определения "скопированных жизненных циклов".
Я использую 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
. Я думал, что они находятся в одном и том же объеме и поэтому должны быть одноэлементными (в том же объеме).
Я понял что-то совершенно неправильное. Как определить реальный синглтон для нескольких компонентов в кинжале 2?