【问题标题】:Dagger2 Why can't one type is injected into more than one component?Dagger2 为什么不能将一种类型注入多个组件?
【发布时间】:2017-07-07 12:38:36
【问题描述】:

在 Dagger2 中,是否可以从多个组件请求相同的类进行注入。下面的示例代码

@Component(modules = classA.class)
interface compA
{
void inject(MyActivity target);
}

@Component(modules = classB.class)
interface compB
{
void inject(MyActivity target);
}

如果可能,请解释原因和任何文档参考。

谢谢

【问题讨论】:

  • 拥有多个这样的组件并没有什么意义。 :|根据google.github.io/dagger//subcomponents.html,此用例将要求Subcomponents for encapsulation
  • 感谢@EpicPandaForce
  • @EpicPandaForce 你能举个例子说明上面使用子组件吗

标签: android dependency-injection dagger-2


【解决方案1】:

不是同时。你可以调用任何你希望的注入函数,但你不能用compA然后compB注入它。但是,您可以创建一个基于子组件 A 和 B 的组件 C,然后将其注入。

【讨论】:

  • 我希望能解释一下为什么?你也可以告诉我如何使用子组件来做到这一点,因为我对它们没有任何经验。
  • 为什么是哲学的——注入的想法是它填充了所有的值。因此,当 Dagger 看到它应该注入的值它不知道如何注入时,它会抛出异常。那是匕首的设计决定,抛出错误而不是部分注入。对于基于构造函数的注入来说,哪个是有意义的——它现在不需要为其他参数添加什么。至于子组件——我会用谷歌搜索它们,我现在没有时间整理一个例子。
  • 谢谢,是的,你是对的。该组件将尝试制作图形,并且当它不知道 tio 如何完全填充它抛出的内部依赖项时,这是相当公平的交易。感谢您的回答。
  • 你现在有时间举一个小例子来说明如何使用子组件完成上述操作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
相关资源
最近更新 更多