这是我的问题,我有一个Client
接口,它有一个<T> Prop<T> getProp(Class<T>)
方法。可以使用PropKey
构建PropKey.of(Class)
。
我在像Client
这样的模块中注入bind(Client.class).to(ClientImpl.class).in(Scopes.SINGLETON);
的实例,我希望能够像这样注入Prop
:
public class MyService implements Service {
@Inject Client client;
@Inject Prop<User> user;
}
如何告诉Guice注射Prop<User>
会导致client.getProp(User.class)
。我主要是通过SPI搜索了如何做到这一点,但我没有找到任何方法来获得未知的绑定。我还回顾了Jukito,这是一个使用SPI的质量项目。
答案 0 :(得分:3)
除非Prop<T>
本身是一个可注射的具体类,否则没有办法让Guice绑定T
所有类型Prop
。在那种情况下,它只会工作。&#34;
但是如果类型集T
很小,你可以明确地绑定到提供者:
class PropProvider<T> implements Provider<Prop<T>> {
private final Class<T> type;
@Inject Client client;
PropProvider(Class<T> type) {
this.type = type;
}
@Override
public void get() {
return client.getProp(type);
}
}
class MyModule extends AbstractModule {
@override
protected void configure() {
bind(new TypeLiteral<Prop<User>>() { })
.toProvider(new PropProvider(User.class));
// More similar statments...
}
}
或者,您可以使用custom injections来编写类似
的内容class MyService implements Service {
@Inject Client client;
@InjectProp Prop<User> user;
}
但您需要使用自定义注释。