私は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の異なるインスタンスを取得します。 (これは私が実際に欲しいものです)、それゆえ、私が行動主題の次に発射するとき、行動主語が異なるので、子供たちは反応しません。
継承の代わりに合成を使用する必要がありますか?
あなたは正しいです、それはRoboguiceの問題ではありません、実際に私のデザイン以外のものでは問題ではありません。シングルトンの組み合わせ、私がコード化した依存性注入と継承がこの問題を紹介しました。私はbehaviorSubjectを静的フィールドにマーキングするというあなたのソリューションが好きですが、まだ私が導入した問題のバンド補助ソリューションのようです。私はコーヒーを取らなければならず、ちょうどそれを再要因しなければならないと思う –