Я, вероятно, что-то пропустил, но я думал, что Scopes, подобные @Singleton, используются для определения «скопированных жизненных циклов».Области в кинжале 2
Я использую Dagger 2 в приложении для Android (но я не думаю, что проблема связана с 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?
Но компонент может иметь только одну аннотацию области, не так ли? Как мне это сделать, если у меня есть компонент приложения с '@ Application' и LoginComponent с областью' @ Activity'? – sockeqwe
Справа. Компонент не может быть аннотирован двумя областями. Компонент области действия будет иметь все зависимости от компонента области приложения, если он определен в аннотации '@Component (dependencies = ApplicationComponent.class)'. Подумайте о компонентах с областями в виде графиков и подграфов. Компонент приложения и его область действия - корневой граф, компонент активности и его область действия - подграф корня. –
Предотвращает использование области '' @ @ Singleton'', чтобы ввести '' '@ Application''' в' '' @ Activity''' область? Например, если MyPresenter имеет область '' @ Application''', и я хочу ввести его в MyActivity, который имеет область '' @ Activity'''. – AAverin