2016-04-30 6 views
1

私は1つの基本クラスと2つの派生クラスを持っています。私は非常に単純化されたバージョンで説明しようとします。RoboguiceとRxJavaの継承と依存性注入

public class AllIntegers{ 
    List<Integer> myList; 
    BehaviorSubjec<Integer> behaviorSubject; 
    @Inject 
    public AllIntegers(List<Integers> allIntegers) { 
     behaviorSubject = BehaviorSubject.create(); 
     //some logic 
    } 
    public BehaviorSubject<Integer> getAllIntegersBSAsObservable() { 
     return this.behaviorSubject.asObservable(); 
    } 
} 


public class OddIntegers extends AllIntegers { 
    List<Integer> myList; 

    @Inject 
    public OddIntegers(... some dependencies...) { 
     /* ... some logic ... */ 
     //Getting observable from parent 
     getAllIntegersBSAsObservable.subscribe(new Subscriber(...)); 
    } 
} 

public class EventIntegers extends AllIntegers { 
    List<Integer> myList; 

    @Inject 
    public EventIntegers(... some dependencies...) { 
     /* ... some logic ... */ 
     //Getting observable from parent 
     getAllIntegersBSAsObservable.subscribe(new Subscriber(...)); 
    } 
} 

マイRoboguiceモジュールファイルは次のようになります。

bind(IAllIntegers.class).to(AllIntegers.class).in(Scopes.SINGLETON); 
bind(IOddIntegers.class).to(OddIntegers.class).in(Scopes.SINGLETON); 
bind(IEventIntegers.class).to(EventIntegers.class).in(Scopes.SINGLETON); 

を繰り返しますが、私はそれが簡単に書き、理解しやすくするために、ここでは単純化の上に。

問題は、RoboguiceがAllIntegers.classのインスタンスを必要に応じて作成することです。しかし、私は空のコンストラクタをAllIntegers.classに追加して、コンパイラが不平を言うのを避けなければなりません。もちろん、OddIntegersとEventIntegersがそれぞれAllIntegersのOWNインスタンスを取得するため、両方の子がobservableの異なるインスタンスを取得します。 (これは私が実際に欲しいものです)、それゆえ、私が行動主題の次に発射するとき、行動主語が異なるので、子供たちは反応しません。

継承の代わりに合成を使用する必要がありますか?

答えて

0

私はRoboguiceが問題ではないと思いますが、これは標準的な動作です。インスタンスのメソッドgetAllIntegersBSAsObservableを呼び出すと、this.behaviorSubject.asObservable();というインスタンスフィールドが返されます。すべてのインスタンスはシングルトンですが、依然として別々のインスタンスなので、それぞれ独自のインスタンスbehaviorSubjectを持ちます。


可能修正はbehaviorSubjectstatic場を作ることです。

+0

あなたは正しいです、それはRoboguiceの問題ではありません、実際に私のデザイン以外のものでは問題ではありません。シングルトンの組み合わせ、私がコード化した依存性注入と継承がこの問題を紹介しました。私はbehaviorSubjectを静的フィールドにマーキングするというあなたのソリューションが好きですが、まだ私が導入した問題のバンド補助ソリューションのようです。私はコーヒーを取らなければならず、ちょうどそれを再要因しなければならないと思う –