私はダガー2を使用し始めていると私は、私は以下の合併症で走った権利としての事をやっている場合、私はわからない:ダガー2フラグメントの注射およびスワップモジュール
はのは、私がHouseModule
を初期化してきたとしましょうHouse
およびWindowModule
はWindow
で初期化されています。
今私はHouseFragment
を持っています。これは家に関する一般的な情報になっています。 したがって、HouseModule
を含むHouseComponent
を作成しました。
これまでのところとても良いです。 House
とWindow
に関する情報を表示するHouseFragment
(ViewPager)内に複数のネストされたHouseDetailsFragment
があります。 HouseModule
とWindowModule
を含む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
を作成して、もう一方を交換すると考えました...しかし、どうやってそれをしますか?アクセサーはありません。