0

はApplicationComponentによって参照されているモジュール内で以下のように定義されたMainActivityため、このインジェクタがあります:複数の注入は

@Module 
public class MainActivityModule { 

    @Provides 
    @PerActivity 
    public MyActivityDependency myActivityDependency() { 
     return new MyActivityDependency(); 
    } 
} 

とMainActivity自体である:

@PerActivityスコープは、アクティビティのライフサイクル全体にわたってアクティビティの依存関係インスタンスを保持することになっています。

これは基本的に私は(AndroidInjection.inject(本))を複数回噴射を行う場合、私は(少なくともそれが目標です)同じ注入されたインスタンスを取得する権利を有することを意味しています。

この場合、 ".inject()"メソッドが呼び出されるたびにMyDependencyの異なるインスタンスが挿入されるのはなぜですか?

答えて

1

@PerActivityスコープは、アクティビティのライフサイクル全体にわたってアクティビティの依存関係インスタンスを保存することになっています。

そしてそうです。これは、1つのコンポーネントに注釈付き依存関係を1回だけ作成します。

AndroidInjectionは、アクティビティ/フラグメントのコンポーネントを作成する方法を知っているヘルパークラスです。それはそれを保存または永続化しません。したがって、...

AndroidInjection.inject(this); 

は、呼び出されるたびに新しいコンポーネントを作成し、依存関係を挿入します。それは何度も呼び出されることは想定されていません。なぜあなたはどうしてですか? onCreateに1回だけ呼び出すとすべて正常に動作します。

に2回注入する場合は、アクティビティコンポーネント自体を注入してから、再度注入することができます。これを行うには、同じコンポーネントを使用して、毎回同じオブジェクトを取得する必要があります。

@Inject 
DoubleInjectActivityComponent component; 

他の依存関係と同様に注入してください。

+0

インスタンスは各スコープのために適切にキャッシュされることを保証することよりも複数回、他のそれを呼び出すための具体的な理由はありません。 は実際には、古い短剣のアプローチでは、人はそのことを確認するために、このような健全性チェック(または自動化されたテスト)を行うことができます。 また、不慮のミスは、アプリケーションの動作を中断しないことを確実にするでしょう。 – Mahorad

+1

@Mahoradあなたがいることをするだろう、なぜ私は表示されませんが、私は感謝ダビデは、あなたがDoubleInjectActivityComponentの定義方法にもう少し詳しく説明してApplicationComponentおよび/またはの残りの部分にそれをのりでし答え –

+0

にあなたのための選択肢を追加しましたDI構造ですか? – Mahorad

関連する問題