所以我正在做一个在Android上使用Dagger 2的项目。我有两个对象的作用域是相同类型的@Singletons
,所以我使用@Named("some name")
注释来区分这两个对象,但是我试图将这两个对象暴露给子图,比如@PerActivity
,但是我想不出一个简单的方法来做到这一点。通常,当我想公开子组件时,这很容易……只是把它添加到我的ApplicationComponent
接口,但在这种情况下,我不知道如何做到这两个组件是同一类型的感觉。有干净利落的方法吗?还是我做错了?对此的任何帮助都将不胜感激。
您可以在模块和组件中使用@Named("some name")
注释。这意味着,如果您使用添加的注释指定两个名称不同但返回类型相同的供应方法,则应该能够向子图公开这两个方法。
您使用@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
注释;我在我的项目中只使用了一个图表。为什么每个活动都需要注射呢?难道你不能只在该活动中维护状态,并在全局范围内使用注入的dagger组件和保存在该活动中的本地状态数据吗?