我有以下用例。
class ServiceClient {
Object val;
@Inject
public ServiceClient(MyInterface ob){
this.val = ob.getVal();
}
}
class UserClass1{
@Inject
UserClass1(ServiceClient sc){
}
}
class UserClass2{
@Inject
UserClass2(ServiceClient sc){
}
}
现在,在两个用户类中注入(inject)服务客户端时,我希望在 ServiceClient 构造函数类中注入(inject) MyInterface 的不同实现。
如何在 google Guice 中实现这一目标?
最佳答案
您可以使用 @Named
注释来区分不同的实现:
class UserClass1 {
@Inject
UserClass1(@Named("Service1") ServiceClient sc) {
}
}
class UserClass2 {
@Inject
UserClass2(@Named("Service2") ServiceClient sc) {
}
}
class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(ServiceClient.class).annotatedWith(Names.named("Service1")).toInstance(new ServiceClient(new AA()));
bind(ServiceClient.class).annotatedWith(Names.named("Service2")).toInstance(new ServiceClient(new AB()));
}
}
关于java - 吉斯 : Inject mulitple implementation in Single Class constructor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34357920/