我已经开始使用Dagger 2而且我不确定我是否正确处理以下并发症:
我们假设HouseModule
初始化为House
,WindowModule
初始化为Window
。
现在我有HouseFragment
这应该是有关房子的一般信息。
因此,我创建了HouseComponent
,其中包含HouseModule
。
到目前为止一切顺利。
现在,HouseDetailsFragment
(ViewPager)中有多个嵌套HouseFragment
,其中显示有关House
和Window
的信息。
我创建了一个HouseDetailsComponent
,其中包括HouseModule
和WindowModule
。
我的依赖关系图如下所示:
// 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
中显示不同的HouseFragment
?我想创建一个新的HouseModule
,然后交换另一个......但我该怎么做? afaik没有访问者。