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

How can I inject a named component into a sub-graph in Dagger 2?

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

你是正确的,使用 @Named("NAME_GOES_HERE") 有 2 个相同类型的单例。

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

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

请确保在注入这些内容时也包含 @Named("YOUR_NAME_GOES_HERE") 注释。

我没有使用你提到的 @PerActivity 注释;我在我的项目中只使用了一个图表。为什么你需要每 activity 注射一次?您不能只在 activity 中维护状态并在全局范围内使用注入的匕首组件和您在 activity 中保存的本地状态数据吗?

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