2016-05-08 4 views
1

Dagger2を使用して新しいOkHttpClientを注入できるようにしたいが、苦労している。チュートリアルと指示のほとんどはアプリケーションのために書かれており、私はaar(アンドロイドライブラリ)を構築しています。ここDagger2を使ってOkHttpClientを注入する

は私のコンポーネントです:

@Singleton 
@Component(modules = {NetworkModule.class}) 
public interface AndroidSdkComponent { 
    void inject(OkHttpClient httpClient); 
} 

は、ここに私のモジュールです:

@Module 
public class NetworkModule { 

    @Provides 
    @Singleton 
    OkHttpClient provideOkHttpClient(Context context) { 
     final OkHttpClient client = new OkHttpClient(); 
     if (Configuration.isAlphaBuild(context)) { 
      client.networkInterceptors().add(new StethoInterceptor()); 
     } 
     return client; 
    } 
} 

マイライブラリのエントリポイントで、私はそうのようなコンポーネントを構築する:

DaggerAndroidSdkComponent.builder().networkModule(new NetworkModule()) 
              .build(); 

たが、後にするとき私は@Inject OkHttpClient okHttpClientにしようとしていますが、常にnullであるようです。私は間違って何をしていますか?

答えて

2

私は間違っていますか?

void inject(OkHttpClient httpClient); 

これは必要な依存関係を持つOkHttpClientを注入します...しかし、あなたはどちらもそれを呼び出すなく、またokhttpクライアントのフィールドへのアクセスを持っているので、とにかく、この方法は冗長で無意味です。

DaggerAndroidSdkComponent.builder().networkModule(new NetworkModule()) 
             .build(); 

コンポーネントをビルドします。それはビルドです。あなたはまだそれを使用する必要があります。例えばinject()を呼び出し、注入するオブジェクトを注入します。あなたがする必要がどのような


は実際にあなたがでOkHttpClientをしたいオブジェクトを注入するために、あなたのインターフェイスを更新しています。あなたは、クライアントを使用することをしたい場所のいずれかの情報を提供していませんが、あなたはすでにあなたは上記のコードでコンポーネントをビルドする以下のようなSomeClassを持っている必要があります。

class SomeClass { 
    @Inject 
    OkHttpClient mClient(); // THIS is how you mark a field for injection 

    void someMethod() { 
     AndroidSdkComponent component = DaggerAndroidSdkComponent.builder().networkModule(new NetworkModule()) 
       .build(); 

     component.inject(this); // THIS is how you inject a field (okhttp!) 
    } 
} 

次に、あなたがする必要がありますにコンポーネントを使用すると、注入することにしたいについてSomeClassを知っ更新:

@Singleton 
@Component(modules = {NetworkModule.class}) 
public interface AndroidSdkComponent { 
    void inject(SomeClass someclass); // THIS will inject okhttp to your someclass object, as seen above 
} 

くださいは、いくつかのより多くのチュートリアルを読みますあなたが実際にどのように動作するのか、異なるクラスが何をするのかを実際には理解していないように思われるので、 User's Guideは良い出発点です。

関連する問題