2016-12-19 2 views
0

Ich versuche, ein Projekt mit Dolch einzurichten. Gerade jetzt, wenn ich bauen, keines der Dagger * Klassen werden für die Komponenten erzeugt wird, und ich bin immer folgende Fehler:Dolch wird keine Dolch-Klassen für Android generieren

Error:(10, 8) error: [com.redditapp.dagger.RedditAppGraph.inject(com.redditapp.RedditApplication)] 
com.redditapp.ui.ActivityHierarchyServer cannot be provided without an @Provides- or @Produces-annotated method. 
com.redditapp.ui.ActivityHierarchyServer is injected at 
com.redditapp.RedditApplication.activityHierarchyServer 
com.redditapp.RedditApplication is injected at 
com.redditapp.dagger.RedditAppGraph.inject(app) 

und

Error:(13, 10) error: com.redditapp.base.navigation.activity.ActivityScreenSwitcher cannot be provided without an @Inject constructor or from an @Provides-annotated method. 
com.redditapp.base.navigation.activity.ActivityScreenSwitcher is injected at 
com.redditapp.ui.screens.home.HomePresenter.<init>(screenSwitcher) 
com.redditapp.ui.screens.home.HomePresenter is injected at 
com.redditapp.ui.screens.home.HomeActivity.presenter 
com.redditapp.ui.screens.home.HomeActivity is injected at 
com.redditapp.ui.screens.home.HomeComponent.inject(activity) 

Hier ist meine aktuelle Setup.

Anwendungsebene Klasse verwendet:

public void buildComponentAndInject() { 
     component = RedditAppComponent.Initializer.init(this); 
     component.inject(this); 
    } 

Die RedditAppComponent wie folgt aussieht und DaggerRedditAppComponent nicht erzeugt wird und deshalb ist rot:

@ApplicationScope 
@Component(modules = { RedditAppModule.class, UiModule.class}) 
public interface RedditAppComponent extends RedditAppGraph { 
    /** 
    * An initializer that creates the graph from an application. 
    */ 
    final class Initializer { 
     public static RedditAppComponent init(RedditApplication app) { 
      return DaggerRedditAppComponent.builder() 
        .redditAppModule(new RedditAppModule(app)) 
        .uiModule(new UiModule()) 
        .build(); 
     } 
     private Initializer() {} // No instances. 
    } 
} 

Mit einer übergeordneten Klasse RedditAppGraph:

public interface RedditAppGraph { 
    void inject(RedditApplication app); 
    ViewContainer viewContainer(); 
    ActivityHierarchyServer activityHierarchyServer(); 
} 

Das UI-Modul, das die Anbietermethoden enthält, die ausgelöst werden Der Fehler sieht wie folgt aus:

Ich habe versucht, das Projekt neu zu erstellen, um zu sehen, ob es die Klassen generiert.

+0

Wenden Sie den Compiler an? hast du etwas von der Art in deinem Buildgrandle '' apt' 'com.google.dagger: dagger-compiler: 2.8 "' '? – Fred

+0

tue ich, aber anstelle von Apt verwende ich AnnotationProcessor. – AggieDev

Antwort

2

Es sieht aus wie ActivityScreenSwitcherServer ist ein Qualifier. Wenn das der Fall ist, bindest du deinen ActivityHierarchyServer mit dem Qualifier, aber exponiert ActivityHierarchyServer auf Ihrer Komponente (über RedditAppGraph) ohne es. Entfernen Sie entweder das Qualifikationsmerkmal von Ihrer @Provides Methode oder fügen Sie es zur Komponentenschnittstelle hinzu.

+0

Super, danke Gregory! Lief wie am Schnürchen. – AggieDev

+2

FWIW, wir haben vor, Ihnen "vorgeschlagene Korrekturen" wie diese in der Fehlermeldung selbst zu geben, aber wir haben es noch nicht ganz geschafft. – gk5885

Verwandte Themen