Dagger 2和Android MVP-@将片段捆绑包插入Presenter或片段本身

时间:2019-11-12 07:39:39

标签: android dagger-2 dagger

我有一个具有以下结构的示例应用程序; MainActvity显示包含LeftFragment的{​​{1}}。我的目标是在LeftPresenter中用Bundle实例化片段,并将该MainActivity传递给演示者,而无需在片段中调用Bundle

  

我想做什么:

Fragment.arguments片段和演示者都分成@Inject

MainActivity演示者进入@Inject

LeftFragment片段的@Inject本身,然后调用其展示者的方法,该方法采用Bundle作为参数或直接Bundle @Inject进入展示者。

  

实施

实现了Dagger 2(无Bundle)以注入实例,如下所示:

  1. 添加了dagger.android。暴露的MainActivityComponent可在从属组件中访问。 LeftPresenter具有提供MainActivityComponent的模块。在MainActivity中构建了LeftPresenter

  2. MainActivityComponent的形式添加了从属组件,该组件具有LeftComponent方法来绑定片段实例和Builder,并具有一种提供方法,该方法将片段作为参数并返回其{{1 }}。在片段中构建LeftModule

只要未将片段Bundle划分为LeftComponent,此配置就起作用。如果我尝试将片段注入到@Inject中,它将失败,因为片段应注入一个捆绑包,而无法在MainActivity中找到它,因为MainActivityMainActivityComponent提供。

  

假想的解决方案和问题

只需将Bundle的提供方法从LeftComponent移到Bundle就可以解决问题,我可以将片段注入MainActivty。但是我既不能也不想这样做。

  1. “不想要”这样做是因为在我的实际应用程序中(此问题是我的应用程序的简化版本),我在LefComponenet中有多个片段,并且我不想对于返回MainActivityComponent类型的每个提供方法,请使用MainActivity

  2. “不能做”,因为我必须将片段实例绑定到@Qulifiers中。由于该组件内置于Bundle中,因此我无法提供MainActivityComponenet的实例。

我应该放弃我想做什么部分中的某些内容,或者可以实现吗?我将不胜感激

0 个答案:

没有答案