如何将命名组件注入Dagger 2中的子图?

时间:2015-08-21 17:53:11

标签: java android dependency-injection dagger-2

所以我正在使用Android中的Dagger 2进行项目。我有两个相同类型的范围@Singletons的对象,所以我使用@Named("some name")注释来区分这两个,但我试图将这两个对象暴露给子图,例如@PerActivity,但我无法想到一个简单的方法。通常当我想暴露一个子组件时,它很容易......只需将它添加到我的ApplicationComponent接口,但在这种情况下,我不知道如何理解这两个组件属于同一类型。这样做有干净的方法吗?还是我错了?任何有关这方面的帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以在模块组件中使用@Named("some name")注释。这意味着如果您使用不同的名称指定两个提供方法但具有添加的注释的返回类型相同,则应该能够将两者都公开给子图。

答案 1 :(得分:1)

使用@Named("NAME_GOES_HERE")有两个相同类型的单身人士是正确的。

class ExpensiveCoffeeMaker {
  @Inject @Named("water") Heater waterHeater;
  @Inject @Named("hot plate") Heater hotPlateHeater;
  ...
}

来源:http://google.github.io/dagger/

确保在注入这些内容时,还包括@Named("YOUR_NAME_GOES_HERE")注释。

我还没有使用你提到的@PerActivity注释;我在项目中只使用了一个图表。为什么每次活动都需要注射?您是否只是维持该活动中的状态,并使用注入的匕首组件全局使用您在活动中保留的本地状态数据?