39

私は、Dagger 2 でカスタム スコープを実行する 2 つの異なる方法を提案しているように見えるいくつかの異なる記事を見てきました。

  1. 構成変更を存続する MVP プレゼンター パート 2 ( Github リポジトリ):

    • フラグメントごとに一意のカスタム スコープを@Hello1Scope使用し@Hello2Scopeます。Hello1FragmentHello2Fragment
  2. Android で Dagger 2 を試す:

    • すべてのフラグメントに対して単一のカスタム スコープを使用し@PerFragmentます。

私の理解では、方法 2 のように、すべてのフラグメント (つまり ) に使用できる単一のスコープを定義しても問題ないよう@PerFragmentです。実際 (私が間違っている場合は訂正してください)、カスタム スコープの名前は無関係のようです。重要なのは、サブコンポーネントが作成される場所 (つまり、アプリケーション、アクティビティ、またはフラグメント) だけです。

ケース 1 のように、フラグメントごとに一意のスコープを定義するユース ケースはありますか?

4

2 に答える 2

22

あなたの理解は正しいです。名前付きスコープを使用すると意図を伝えることができますが、それらはすべて同じように機能します。

  • スコープ プロバイダー メソッドの場合、各 Component インスタンスは、提供されたオブジェクトの 1 つのインスタンスを作成します。
  • スコープのないプロバイダ メソッドの場合、各 Component インスタンスは、提供されたオブジェクトを注入する必要があるときはいつでも、提供されたオブジェクトの新しいインスタンスを作成します。

ただし、Component インスタンスの有効期間は重要です。同じコンポーネントの 2 つの異なるインスタンスは、スコープが設定されたものであっても、異なるオブジェクト インスタンスを提供します。

スコープ名は、提供されたオブジェクトの有効期間 (Component インスタンスの有効期間と一致する) を示す必要があるため@PerFragment、私にとってははるかに理にかなっています。

「MVP プレゼンター...」チュートリアルをざっと見てみると、作成者が個別のスコープを持つ意図が何であるかが正確にはわかりません。名前は使い捨てなので、あまり読みません。

于 2015-06-22T09:41:53.510 に答える