我有类型A和B.我想绑定两个类型A的实例,并提供两个类型B的实例 - 基于类型A的实例创建类型B的实例。
我尝试在下面执行此操作,但调用provideB2()会导致此异常:
A binding to javax.sql.DataSource was already configured at ...providesB1()
我想这个简单的解决方案是不提供B类的两个实例,而是让我的提供者方法返回C和D类型,两者都扩展B.但是有没有办法在提供两个实例时实现这一点B型?
@BindingAnnotation
@Retention(RetentionPolicy.RUNTIME)
@interface A1 {}
@BindingAnnotation
@Retention(RetentionPolicy.RUNTIME)
@interface A2 {}
//....
(A.class).annotatedWith(A1.class).toInstance(aInstance1);
(A.class).annotatedWith(A2.class).toInstance(aInstance2);
@Provides
@Singleton
@Inject
B providesB1(@A1 a) {
return new B(a)
}
@Provides
@Singleton
@Inject
B providesB2(@A2 a) {
return new B(a)
}
答案 0 :(得分:2)
您已使用绑定注释PHP Warning: get_browser(): HTTP_USER_AGENT variable is not set, cannot determine user agent name in /home/insu/a.php on line 6
和@A1
区分了两个不同的A。您只需要将两个不同的B与绑定注释区分开来,方法是将注释添加到@A2
和providesB1
的注释列表中。