2016-11-14 7 views
2

AndroidアプリケーションにDagger 2を使用していますが、Android用語なしで問題を説明しようとします。ダガー2 1つのコントローラ、スコープされた2つのコンポーネントに依存

単純に、UIを表示するコントローラが1つあります。適切な単位で適切な値を表示するには、このコントローラは2つのスコープ付きコンポーネントに依存する必要がありますが、これは不可能です。ここで

ケースである:私は

  • @Singleton
  • とスコープの一つDbComponent、@Activity
  • 一つのアプリケーションComonentとスコープ、一方のコントローラコンポーネント

    • を持っている - データベースコンポーネントとスコープ@ApplicationはApplicationComponentに依存します。
    • 1つのPreferencesComponent - もう一度コンポーネント、@Applicationでスコープされ、ApplicationComponentに依存します。

    ControllerComponentは、適切な単位(摂氏、華氏、M/S、km /時を示すために私のコントローラが示されなければならないデータを得ることができるので、両方のDbComponentに依存する必要があり、PreferencesComponentオン等)。

    グラフを実装するにはどうすればよいでしょうか?

    私は私に似た質問を、見たが、彼らは助けにはならなかった - question 1question 2

  • +1

    これらの "コンポーネント" のほとんどはモジュールでなければなりません。そういうわけではないのです。続きを読む:http://stackoverflow.com/questions/40545075/dagger2-and-android/40546157#40546157 – EpicPandaForce

    +0

    「スコープごとに1つのコンポーネント」パターンなど何か別のパターンを実行するよう指示していますか?私はその質問が部分的に哲学的だと思う。なぜ(例えば)DbComponentはモジュールだけでなければならないのに対し、networkcomponentのようなものは別のモジュールの代わりに別のコンポーネントになければなりませんか? – definera

    +0

    ネットワークコンポーネントもシングルトンスコープですが、そうではありませんか?次に、シングルトンコンポーネントの一部であるモジュールでなければなりません。あなたがその答えを見るならば、 'NetworkingComponent'は実際のコンポーネントではなく、その中にあるプロビジョニングメソッドを持つ通常の' public interface'でした。 – EpicPandaForce

    答えて

    3

    一方のコントローラのコンポーネントは、@Activity

    一つのアプリケーションComonentとスコープ@Singleton

    とスコープ

    1つのDbComponent - データベースコンポーネントで、@Applicationでスコープされ、ApplicationComponentに依存します。

    1つのPreferencesComponent - もう一度コンポーネント、@Applicationでスコープされ、ApplicationComponentに依存します。

    実際にはa component should exist per scopeです。

    あなたが持つべき2つのコンポーネント:

    1)ApplicationComponent@Singleton

    @Singleton 
    @Component(modules={DbModule.class, PreferencesModule.class, AppModule.class}) 
    public interface ApplicationComponent { 
        // provision methods 
    } 
    

    2)ControllerComponentでマークされた、と記さ@Activity

    @Activity 
    @Component(dependencies={ApplicationComponent.class}, modules={ControllerModule.class}) 
    public interface ControllerComponent extends ApplicationComponent { 
        // provision methods 
    } 
    
    関連する問題