2016-08-08 5 views
2

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.

Antwort

Verwandte Themen