我有一個基類和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和EventInteger每次都獲得它們的AllIntegers的OWN實例,所以這兩個孩子都會得到不同的observable實例,而singleton基類也會得到它自己的(這是我真正想要的),所以當我在行爲主題上觸發onNext時,由於行爲主題不同,孩子們不會做出反應。
我應該使用組合而不是繼承嗎?
你是對的,這不是一個Roboguice問題,它實際上不是一個除了我的設計之外的任何問題。我編碼的單例,依賴注入和繼承的組合引入了這個問題。我喜歡你的標記行爲的解決方案,雖然對於我介紹的問題,它似乎仍然是一個樂隊幫助解決方案。我想我得喝點咖啡,然後重新考慮一下 –