ダガー2を試していますが、フレームワークを理解するためにテストしています。ダガーコンポーネントの依存関係の意味
@Module
public class ApplicationModule {
private Application appContext;
public ApplicationModule(Application appContext) {
this.appContext = appContext;
}
@Provides
@Singleton
public Context provideContext() {
return appContext;
}
}
は今もNetworkComponentたい:モジュールで
@Component(modules = {ApplicationModule.class})
@Singleton
public interface ApplicationComponent {
Context provideContext();
}
:
私はので、私はこのようにそれを定義し、全アプリのシングルトンにする必要がありApplicationComponentを抱えていますアプリが生存している限り生きている必要があります。 そのネットワークコンポーネントはApplicationComponentに依存する必要があります。 は、だから私は、次のように私のnetworkcomponentを持っている:
@Component(dependencies = {ApplicationComponent.class}, modules = {NetworkModule.class})
@PerApp
public interface NetworkComponent extends ApplicationComponent {
@Named(DaggerConstants.DEFAULT_RETROFIT)
Retrofit provideDefault();
@Named(DaggerConstants.OTHER_RETROFIT)
Retrofit provideOther();
void inject(MainActivity activity);
}
モジュール:
1)私は、Androidでのアプリケーションに2つのコンポーネントを格納します。
@Module
public class NetworkModule {
@Named(DaggerConstants.DEFAULT_RETROFIT)
@PerApp
@Provides
Retrofit provideDefaultRetrofit() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.someurl.com/")
.build();
return retrofit;
}
@Named(DaggerConstants.OTHER_RETROFIT)
@PerApp
@Provides
Retrofit provideOtherRetrofit() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.someotherurl.com/")
.build();
return retrofit;
}
@PerApp
@Provides
SharedPreferences networkPreferences(Context context) {
return context.getSharedPreferences("network", Context.MODE_PRIVATE);
}
}
私はいくつかの質問を持っています。 しかし私にはAppComponentとNetworkComponentを格納するのが奇妙に思えます。 私のApplicationComponentがNetworkComponentを提供するべきではないのですか?
2)アノテーション@PerAppとstuffは、何かを意味するか、単に@PerAppアノテーションを持つオブジェクトが存在することを見ているDaggerであり、そうでなければそれを削除しますか?これは私には分かりません。
3)@Singletonなどのモジュールをマークすると便利なのですが、これは可能ですが、どの例でも表示されません。
ありがとうございました。 – user1007522
'YourAwesomeComponent c'を持つ@RautDarpanは、このように' c = null; 'をnullにします。 – azizbekian