我有类型 A 和 B。我想绑定(bind)两个类型 A 的实例,并提供两个类型 B 的实例 - 类型 B 的实例是基于类型 A 的实例创建的。
我尝试在下面执行此操作,但对 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)
}
最佳答案
您已经通过绑定(bind)注释 @A1
和 @A2
区分了两个不同的 A。您只需要通过绑定(bind)注释来区分两个不同的 B,只需将您的注释添加到 providesB1
和 providesB2
的注释列表中即可。
关于java - 使用Guice,如何提供同一类型的不同实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34229120/