2016-12-19 121 views
0

我想解釋的最簡單的方法是使用包括RxJava每範圍的依賴性/ overrideing每範圍依賴於Dagger2

class SomeClass { 
    CompositeSubscriptions subscriptions; 
    public SomeClass(CompositeSubscription subscriptions) { 
     this.subscriptions = subscriptions; 
     subscriptions.add(...); 
     subscriptions.add(...); 
     subscriptions.add(...); 
     subscriptions.add(...); 
     subscriptions.add(...); 
    } 

    public void destory() { 
     subscriptions.unsubscribe(); 
    } 
} 

所以我希望能夠做的就是上課只是一個代碼示例能夠要求一個CompositeSubscription並且他們得到那個範圍。這樣他們可以自由地取消訂閱整個CompositeSubscription。這將是需要的,以便我的單身人士不會干擾我的活動,不會干擾我的碎片。

+0

@DavidRawson我會完全承認,我只是認爲這是不可能的一些其他堆棧溢出答案。但我現在會完全嘗試。 – Buttink

回答

0

您不能在多個作用域中提供相同的類。您收到錯誤{Class} is bound multiple times

所以下面的設置是無效

@Module 
public class ActivityRxJavaModule { 

    @Provides 
    @PerActivity 
    CompositeSubscription providesCompositeSubscription() { 
     return new CompositeSubscription(); 
    } 
} 

@Module 
public class FragmentRxJavaModule { 

    @Provides 
    @PerFragment 
    CompositeSubscription providesCompositeSubscription() { 
     return new CompositeSubscription(); 
    } 
} 

所以有兩種解決辦法,我知道的。

  1. 每個範圍的子類 a。 Singleton {Class},PerWhatever {Class}
  2. 使用名稱註釋 a。 @Named(「單身」),@Named(「perwhatever」)

我似乎更喜歡每範圍的子類,因爲我覺得它重構時,是比較安全的,但都應該工作。