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);
}
}
Je viens de copier ce code. Il compile bien. Avec et sans les commentaires sur la portée. –
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. –