2016-07-01 10 views
0

ダガー2クロスモジュールの依存関係

DaggerApplicationComponent.builder() 
    .applicationModule(new ApplicationModule(this)) 
    .networkModule(new NetworkModule()) 
    .apiModule(new ApiModule()) 
    .build(); 

私は今、セットアップに少なくともUserServicesオブジェクトを提供しますUserServicesモジュールをしたいですそのオブジェクトは設定のために他のモジュールからのいくつかの提供を必要とします。たとえば、NetworkModuleHttpLoggingInterceptor.Levelを提供しています。これはアプリ内の他のネットワーク通話に使用されており、UserServices通話で同じものを使用したいと考えています。 NetworkModuleのデバッグバージョンから

例:私はUserServicesを維持したい

@Module 
public class NetworkModule extends BaseNetworkModule { 
    HttpLoggingInterceptor.Level getHttpLoggingInterceptorLevel() { 
     return HttpLoggingInterceptor.Level.BODY; 
    } 
} 

は、カプセル化のために、独自のモジュールで提供しています。

は、どのように私はそれが同じコンポーネントに含めることができますので、UserServicesモジュールを設定し、それが提供するUserServicesオブジェクトを構成するためにNetworkModuleに提供へのアクセスを持っていますか?

おかげ

答えて

0

あなたのUserServicesモジュールに依存関係としてネットワークモジュールを追加したり、UserServicesコンポーネントへの依存コンポーネントとして、ネットワークコンポーネントを追加することができます。従属コンポーネントとして追加された場合は、ネットワークコンポーネントのプロバイダに言及する必要があります。

1

少し試行錯誤してこれを理解しました。依存モジュールがすでにcomponentに含まれていない場合、私は単に@Module注釈にincludesパラメータを追加することができます。私の場合は

@Module(includes= { 
     NetworkModule.class, 
     ApiModule.class 
    }) 

、依存モジュールおよび他のいくつかは、いくつかの場所で使用され、すべてが必要とされています独自にcomponentでは独立しています。幸運なことに、Daggerは同じコンポーネント内のモジュールを介して私のために詰まっているようです。だから私は本当にこの場合特別なことをする必要はありませんでした。これはコンポーネントの中でこれだけです:

@Singleton 
@Component(modules = { 
      ApplicationModule.class, 
      NetworkModule.class, 
      SchedulerModule.class, 
      ApiModule.class, 
      UserServicesModule.class 
    })