2016-02-08 1 views
0

Je suis en train de scope 2 Dagger dans les sous-composants, mais l'erreur suivante sur la constructionPourquoi l'étendue du sous-composant Dagger-2 ne fonctionne-t-elle pas?

cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method. 

Si je commente les annotations de la portée, la construction réussit. Quelqu'un sait pourquoi? Est-ce que Dagger 2 n'est pas conçu pour ce scénario?

ParentComponent.java

import com.cueyoueye.android.inject.annotation.ActivityScope; 

import javax.inject.Inject; 
import javax.inject.Singleton; 

import dagger.Component; 
import dagger.Module; 
import dagger.Provides; 
import dagger.Subcomponent; 

@Singleton 
@Component(modules = ParentComponent.ParentModule.class) 
public interface ParentComponent { 
    SubComponent subComponent(); 

// @ActivityScope 
    @Subcomponent(modules = SubComponentModule.class) 
    interface SubComponent { 
     void inject(Example activity); 
    } 

    @Module 
    class SubComponentModule { 
     @Provides 
//  @ActivityScope 
     B provideB() { 
      return new B("Better"); 
     } 
    } 

    class B { 
     public B(String s) { 
     } 
    } 

    @Module 
    class ParentModule { 
     @Provides 
     @Singleton 
     Ab provideAb() { 
      return new Ab("s"); 
     } 
    } 

    @Singleton 
    class A { 
     @Inject 
     public A() { 
     } 
    } 

    class Ab { 
     public Ab(String s) { 
     } 
    } 
} 

Example.java

import javax.inject.Inject; 

public class Example { 
    @Inject 
    ParentComponent.B b; 

    public void injectSelf() { 
     DaggerParentComponent.builder() 
       .build() 
       .subComponent() 
       .inject(this); 
    } 
} 
+0

Je viens de copier ce code. Il compile bien. Avec et sans les commentaires sur la portée. –

+0

Merci de l'avoir exécuté David. Tu as raison, j'ai isolé ce code dans sa propre application et ça se construit. Je devrais déboguer plus loin je suppose. –

Répondre

0

Ce code est fonctionnel dans un isolement complet. Quelque chose d'autre provoque cette erreur de construction.