2016-12-19 9 views
0

Daggerでプロジェクトを設定しようとしています。今、私はビルドするとき、ダガーのどれ*クラスは、コンポーネントのために生成されている、と私は、次のエラーを取得しています:DaggerはAndroidのDaggerクラスを生成しません

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) 

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) 

ここに私の現在の設定です

アプリケーションレベルのクラスには、使用しています:RedditAppComponentはこのようになります

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

とDaggerRedditAppComponentが生成されていないため、赤です:

@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. 
    } 
} 

親クラスRedditAppGraph付:

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

throwingしているプロバイダメソッドを含むUIモジュールグラムエラーは次のようになります。

@Module 
public class UiModule { 

    @Provides 
    @ApplicationScope 
    ActivityScreenSwitcher provideActivityScreenSwitcher() { 
     return new ActivityScreenSwitcher(); 
    } 

    @Provides 
    @ApplicationScope 
    @ActivityScreenSwitcherServer 
    ActivityHierarchyServer provideActivityHierarchyServer(final ActivityScreenSwitcher screenSwitcher) { 
     return new ActivityHierarchyServer.Empty() { 
      @Override 
      public void onActivityStarted(Activity activity) { 
       screenSwitcher.attach(activity); 
      } 

      @Override 
      public void onActivityStopped(Activity activity) { 
       screenSwitcher.detach(); 
      } 
     }; 
    } 
} 

私はそれがクラスを生成しますかどうかを確認するために、プロジェクトを再構築しようとしました。

+0

コンパイラを適用していますか?あなたは、あなたのビルドグラデルの '' apt '' com.google.dagger:dagger-compiler:2.8 "' 'のようなものを持っていますか? – Fred

+0

私はそうですが、aptの代わりにannotationProcessorを使用しています。 – AggieDev

答えて

2

ActivityScreenSwitcherServerは修飾子です。その場合は、ActivityHierarchyServerを修飾子でバインドしていますが、コンポーネントにActivityHierarchyServerRedditAppGraphまで)が表示されます。 @Providesメソッドから修飾子を削除するか、コンポーネントインタフェースに追加してください。

+0

素晴らしい、ありがとうグレゴリー!魅力のように働いた。 – AggieDev

+2

FWIW、エラーメッセージ自体にこのような "推奨される修正"を提供する計画がありますが、まだ完了していません。 – gk5885

関連する問題