Ich habe angefangen mit Dagger 2 und ich bin nicht sicher, ob ich die Dinge richtig tun werde, wie ich in der folgenden Komplikation lief:Dagger 2 Injektion in Fragmente und tauschen Module
Lasst uns sagen, ich habe ein HouseModule
initialisiert mit einem House
und einem WindowModule
initialisiert mit einem Window
.
Jetzt habe ich eine HouseFragment
, die allgemeine Informationen über das Haus soll. So habe ich eine HouseComponent
einschließlich der HouseModule
erstellt.
So weit so gut. Jetzt gibt es mehrere verschachtelte HouseDetailsFragment
s innerhalb der HouseFragment
(ViewPager), die Informationen über die House
und die Window
zeigen. Ich erstellte eine HouseDetailsComponent
einschließlich der HouseModule
und WindowModule
.
Mein Abhängigkeitsgraphen sieht wie folgt aus:
// 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);
}
Komponentenerstellung wird immer komplexer auf diese Weise, und ich frage mich, wie Abhängigkeiten der HouseFragment
zu injizieren und vor allem die HouseDetailsFragment
beste s. z.B. die HouseDetailsComponent
zu bauen Ich habe folgendes zu tun:
// casting omitted
DaggerHouseDetailsComponent.builder()
.applicationComponent(getActivity().getApplication().getApplicationComponent())
.activityModule(getActivity().getActivityModule())
.houseModule(getParentFragment().getHouseModule())
.windowModule(new WindowModule(window)).build().inject(this);
Ich mag nicht das Wissen (und Gießen) erforderlich ist, um Eltern Fragmente und Aktivitäten. Gibt es einen einfacheren Weg, um das zu erreichen, was ich tun möchte? Irgendwelche anderen Vorschläge zum Abhängigkeitsgraphen?
Auch wie zeige ich eine andere House
in der HouseFragment
? Ich dachte, ein neues HouseModule
zu schaffen und dann das andere auszuwechseln ... aber wie mache ich das? Es gibt keine Accessoren afaik.