私はおそらく何かを見逃していましたが、 @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
スコープを持つ 2 つの異なるコンポーネントがあります。
@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 で複数のコンポーネントに対して実際のシングルトンを定義するにはどうすればよいですか?