如何将命名组件注入 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 类型和添加的注释,您应该能够将两者都公开给子图。
所以我正在 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 类型和添加的注释,您应该能够将两者都公开给子图。