2016-05-28 18 views
4

私はApplicationComponentに追加したのでOkHttpClientApplicationModuleから公開する必要があります。このような何か:ダガーApplicationComponentを設定する必要があります

@Module 
public class ApplicationModule { 

    @Provides @Singleton 
    public OkHttpClient provideOkHttpClient() { 
    final OkHttpClient.Builder client = new OkHttpClient.Builder(); 

    return client.build(); 
} 



@Singleton 
@Component(modules = {ApplicationModule.class}) 
public interface ApplicationComponent { 

    OkHttpClient okHttpClient(); 

} 

あなたが右の上記を参照できるように、私はApplicationComponentOkHttpClient okHttpClient();を追加しました。

@Module 
public class NetworkModule { 

    @Provides @ActivityScope 
    public ProjectService provideProjectService(OkHttpClient client) { 
      return new ProjectService(client); 
} 


    @Component(dependencies = {ApplicationComponent.class}, modules = {NetworkModule.class}) 
@ActivityScope 
public interface NetworkComponent { 

     void inject(@NonNull MyActivity myActivity); 

} 

が、今、私はランタイムエラーを取得するとき:

Caused by: java.lang.IllegalStateException: css.test.demo.ApplicationComponent must be set 
    at css.test.demo.main.projects.network.DaggerNetworkComponent$Builder.build(DaggerNetworkComponent.java:102) 
    at css.test.demo.main.projects.MyActivity.onCreate(MyActivity.java:159) 
    at android.app.Activity.performCreate(Activity.java:6237) 

、ここでは、私がMyActivityでそれを構築する方法である:

NetworkComponent = DaggerNetworkComponent.builder() 
    .NetworkModule(new NetworkModule(this)) 
    .build(); 

NetworkComponent.inject(this); 
私はそれが好きで使う私の NetworkModuleで今

答えて

15

私はダガーが魔法を持たないことを強調したいのです— java。必要な情報を与えないと、コンパイラは不平を言うでしょう。

DaggerNetworkComponent.Builderを見ると、appComponent(AppComponent component)というメソッドがあります。これは、あなたのが依存しているappcomponentを追加することをダガーが期待するところです。

NetworkComponent = DaggerNetworkComponent.builder() 
     .NetworkModule(new NetworkModule(this)) 
     .appComponent(((App)getApplication()).getAppComponent()) // add your appComponent 
     .build(); 

これはうまくいくはずです。

+0

たとえば、あるクラスのアプリケーションモジュールを完全な依存関係にしたくない場合、私はネットワークモジュールにapplicationModuleを含めましたが、他のクラスは依存関係を満たすためにネットワークモジュールしか必要としません。助けてください。 –

+0

@eCDroidネットワークモジュールがアプリケーションモジュールに依存し、他のいくつかのモジュールがネットワークモジュールに依存する場合、この他のモジュールもアプリケーションモジュールに依存しますが、モジュールを分割/リファクタリングしたり、新しいモジュールを作成したりすることができます。 –

関連する問題