2016-08-08 4 views
2

私はダガー2を使用し始めていると私は、私は以下の合併症で走った権利としての事をやっている場合、私はわからない:ダガー2フラグメントの注射およびスワップモジュール

はのは、私がHouseModuleを初期化してきたとしましょうHouseおよびWindowModuleWindowで初期化されています。

今私はHouseFragmentを持っています。これは家に関する一般的な情報になっています。 したがって、HouseModuleを含むHouseComponentを作成しました。

これまでのところとても良いです。 HouseWindowに関する情報を表示するHouseFragment(ViewPager)内に複数のネストされたHouseDetailsFragmentがあります。 HouseModuleWindowModuleを含むHouseDetailsComponentを作成しました。

私の依存関係グラフは次のようになります。

// provides application wide dependencies (Application context, SharedPref, Repository,...) 
@Component(modules = {ApplicationModule.class}) 
public interface ApplicationComponent { 

} 

// provides general activity dependencies (Navigator,...) 
@Component(dependencies = ApplicationComponent, modules = {ActivityComponent.class}) 
public interface ActivityComponent{ 
    void inject(MainActivity mainActivity); 
} 

// provides house fragment specific dependencies (HousePresenter,...) 
@Component(dependencies = ApplicationComponent, modules = {ActivityComponent.class, HouseComponent.class}) 
public interface HouseComponent extends ActivityComponent { 
    void inject(HouseFragment fragment); 
} 

// provides house details fragment specific dependencies (HouseDetailsPresenter,...) 
@Component(dependencies = ApplicationComponent, modules = {ActivityComponent.class, HouseComponent.class, WindowComponent.class}) 
public interface HouseDetailsComponent extends ActivityComponent { 
    void inject(HouseDetailsFragment detailsFragment); 
} 

コンポーネントの作成は、このようますます複雑になり、私はHouseFragmentへの依存性を注入し、特にHouseDetailsFragment最高の方法だろう。例: HouseDetailsComponentを構築するために、私は次の操作を行う必要があります:

// casting omitted 
DaggerHouseDetailsComponent.builder() 
.applicationComponent(getActivity().getApplication().getApplicationComponent()) 
.activityModule(getActivity().getActivityModule()) 
.houseModule(getParentFragment().getHouseModule()) 
.windowModule(new WindowModule(window)).build().inject(this); 

は私が親フラグメントおよび活動について必要な知識(鋳造)を嫌います。 私がやりたいことを達成するための簡単な方法はありますか?依存関係グラフに関する他の提案はありますか?

また、に別のHouseを表示するにはどうすればよいですか?私は新しいHouseModuleを作成して、もう一方を交換すると考えました...しかし、どうやってそれをしますか?アクセサーはありません。

答えて

関連する問題