2017-11-10 5 views
0

Dagger Android 2.13を使用していて、アクティビティスコープの依存関係を設定中です。Dagger 2.13:コンストラクタが挿入されたクラスの制御範囲

私はモジュール内で宣言依存性のためにスコープを指定する方法を理解する:

@Module 
public class MyActivityModule { 
    @Provides 
    @PerActivity 
    MyActivityDataRepo provideMyActivityDataRepo() { 
     return MyActivityDataRepo(); // simplified for the sake of clarity 
    } 
} 

しかし、どのように、私は、以下のようにコンストラクタ・インジェクションを経由して依存関係をグラフに追加されたクラスのスコープを指定するのでしょうか?

class MyActivityOtherDataRepo { 

    @Inject 
    MyActivityOtherDataRepo() { 
    } 
} 

このクラスを作成する方法はありますか。アクティビティスコープはMyActivityですか?

メンバーインジェクションを介してMyActivityに注入されるとすぐに有効スコープになりますか?もしそうなら、スコープをMyActivityに限定する方法がありますか?私が考えることができるのは、MyActivityOtherDataRepoパッケージをプライベートにして、MyActivityと同じパッケージに入れることです。

答えて

1

ことはでき範囲によって要素:範囲

@Provides 
@PerActivity 
MyActivityDataRepo provideMyActivityDataRepo() { /*...*/} 
  • @Provides又は@Binds注釈付きメソッドに注釈を付けるまたはコンストラクタ注入とクラス自体にスコープアノテーションを追加

    • @PerActivity class MyActivityOtherDataRepo { 
          @Inject 
          MyActivityOtherDataRepo() { /*...*/} 
      } 
      

    これは、この範囲によってスコープされるので、@PerActivity内の任意の成分、ならびに任意のサブコンポーネントは@PerActivityはスコープは何も提供することができるであろう。

    あなたのクラス(public/package private)の可視性はこのスコープに直接影響しませんが、アプリケーションの他の部分でクラスをインポートすることはできません。

  • +1

    よくコンストラクタインジェクションを使用せず、モジュール内のメソッドからのみ提供することができます。次に、このモジュールを使用する単一コンポーネントに含めます。私はどんな利点も見ません、そして、あなたはより多くの不必要な複雑さを導入するでしょう。 –

    関連する問題