2016-12-19 21 views
0
의 범위 당 종속성을 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(); 
    } 
} 

그래서 내가 할 수 있기를 원하는 것입니다 RxJava를 포함하는 코드 예제와 생각 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. 싱글 톤 {클래스}, PerWhatever {클래스}
  2. 이름 주석 사용 a. @Named ("singleton"), @Named ("perwhatever")

리팩토링 할 때 좀 더 안전하다고 느끼기 때문에 스코프 당 Subclass를 선호하는 것처럼 보입니다. 그러나 둘 다 작동해야합니다.