Dagger2ではスコープごとに1つのインスタンスしか持たないようにしています。Dagger2でスコープごとにインスタンスを1つだけ確保する
デフォルトのシングルトンスコープは、すでにそのように動作しています。同じオブジェクトをいくつ注入するかは関係ありませんが、GlobalInstance
と呼びましょう。GlobalInstance provideGlobalInstance()
というメソッドは、一度だけ呼び出されます。他の側では
私はカスタムスコープを定義した場合、例えば@SessionScope
といくつかのSessionModule
内部のために私はUser
を注入していた方法User provideUser()
、そのメソッド(および、結果的に、new User()
コンストラクタは)何回も呼び出されますします。毎回同じモジュールインスタンスを使用するかどうかにかかわらず、@Inject User mUser
ごとにUser provideUser()
が呼び出されています。これはスコープ制限の「シングルトン」ではなく、複数のインスタンスが作成されているためです。
通常のDagger APIを使用して、これを達成するための明確な方法がありますか。これを行う1つの方法は、モジュールクラスの中に怠惰なgetterを持たせることですが、それを行うにはあまりクリーンな方法ではありません。
あなたは[OK]を指定したコンポーネント – EpicPandaForce
に属しているインスタンスを注入することを確実にするために同じコンポーネントを使用する必要があり、そうではなく、モジュールを永続化するので、私は存続すべきですどうにか全体のコンポーネント、右か?それを行うベストプラクティスは何ですか?いくつかの静的/グローバルコンポーネントキャッシュ? – SadClown
はい、通常ははいです。アプリケーションレベルの@Singletonスコープでは 'static'、アクティビティでは' onRetainCustomNonConfigurationInstance() 'を見てきました。マップ内の何らかのキーにコンポーネントを格納している場合は、「Map」と書かれています –
EpicPandaForce