2017-05-09 9 views
0

私のアプリケーションでdagger2を使用しています。モジュール全体を作成していますので、アプリケーション全体に含まれていますので、applicationクラスで初期化しています。dagger2のコンストラクタでモジュールにアクティビティインスタンスを送信する方法

以下は、依存関係の解決に役立つdagger2のコンポーネントです。

NetComponent.java

@Singleton 
@Component(modules = {AppModule.class, NetModule.class}) 
public interface NetComponent { 
    void inject(AuthenticationActivity authenticationActivity); 

    void inject(PaymentActivity paymentActivity); 
} 

AppModule.java

@Module 
public class AppModule { 

    private Application application; 

    public AppModule(Application application) { 
     this.application = application; 
    } 

    @Provides 
    @Singleton 
    Application providesApplication() { 
     return application; 
    } 
} 

NetModule.java

@Module 
public class NetModule { 

    @Provides 
    @Singleton 
    SharedPreferences providesSharedPreferences(Application application) { 
     return PreferenceManager.getDefaultSharedPreferences(application); 
    } 

    @Provides 
    @Singleton 
    Cache provideOkHttpCache(Application application) { 
     int cacheSize = 10 * 1024 * 1024; // 10 MiB 
     Cache cache = new Cache(application.getCacheDir(), cacheSize); 
     return cache; 
    } 

    @Provides 
    @Singleton 
    Gson provideGson() { 
     GsonBuilder gsonBuilder = new GsonBuilder(); 
     gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); 
     return gsonBuilder.create(); 
    } 

    @Provides 
    @Singleton 
    OkHttpClient provideOkHttpClient(Cache cache) { 
     OkHttpClient okHttpClient = new OkHttpClient(); 
     okHttpClient.newBuilder() 
       //.addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR) 
       .cache(cache) 
       .build(); 
     return okHttpClient; 
    } 

    @Provides 
    @Singleton 
    @Named("authRetrofit") 
    Retrofit provideAuthRetrofit(Gson gson, OkHttpClient okHttpClient) { 
     Retrofit retrofit = new Retrofit.Builder() 
       .addConverterFactory(GsonConverterFactory.create(gson)) 
       .baseUrl(PAYMENT_SERVICE) 
       .client(okHttpClient) 
       .build(); 
     return retrofit; 
    } 

    @Provides 
    @Singleton 
    @Named("paymentRetrofit") 
    Retrofit providePaymentRetrofit(Gson gson, OkHttpClient okHttpClient) { 
     Retrofit retrofit = new Retrofit.Builder() 
       .addConverterFactory(GsonConverterFactory.create(gson)) 
       .baseUrl(LOGIN_SERVICE) 
       .client(okHttpClient) 
       .build(); 
     return retrofit; 
    } 


} 

AppApplication.java

public class AppApplication extends Application { 

    private NetComponent mNetComponent; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     mNetComponent = DaggerNetComponent.builder() 
       .appModule(new AppModule(this)) 
       .build(); 
    } 

    public NetComponent getmNetComponent() { 
     return mNetComponent; 
    } 

} 

Validator.java

@Module 
public class Validator { 

    @Provides 
    com.mobsandgeeks.saripaar.Validator providesValidator(Application application) { 
     return new com.mobsandgeeks.saripaar.Validator(application); 
    } 
} 

私はそれを使用していたにValidatorのコンストラクタにアクティビティインスタンスを渡したいです。

MainActivity.javaValidatorを注入したい場合、コンストラクタにはMainActivityインスタンスが必要です。

これにはどのようなアプローチが必要ですか?このためにactivityで短剣の依存関係を初期化する必要があります。このために新しいコンポーネントを作成する必要はありますか?

答えて

1

あなたは、単にあなたのValidatorModuleのコンストラクタを作成することができます。

@Module 
public class Validator { 

    private final Activity activity; 

    public Validator(Activity activity) { 
     this.activity = activity; 
    } 

    @Provides 
    com.mobsandgeeks.saripaar.Validator providesValidator() { 
     return new com.mobsandgeeks.saripaar.Validator(activity); 
    } 
} 

は、それはあなたが

+0

Dagger2が警告を示している 'ValidationComponent validationComponent = DaggerValidationComponent.builder() 探しているものであれば、私に教えてください。 'validatorModule(getValidatorModule())'を追加するときに、validatorModule(getValidatorModule()) .build(); ' –

+0

これは推奨されていません。 –

関連する問題