有很多关于如何使用 Guice Provider 绑定到泛型类的在线资源,例如像这样的wiki 条目和像这样的SOF 问题。但是,我很难找到有关如何使用本身通用的 Provider 的资源。
例如,假设我有以下内容:
public interface Foo {
...
}
public class Bar implements Foo {
...
}
如您所见,Bar 有一个必须在构造函数中的注入参数。在我的情况下,我们不能将此参数移动到字段或方法注入。
所以,现在我想为 Foo 编写一个 Provider,但是它返回一个 Bar 的实例。像这样的东西:
@Singleton
public class FooProvider<T extends Foo> extends Provider<Foo> {
@Inject
public FooProvider(Object someParameterWeMustInjectIntoConstructor) {
...
}
...
@Override
public Foo get() {
return new Bar(...);
}
...
}
请注意这个类是如何依赖于 Guice 注入本身的单例,因此必须使用.toProvider(FooProvider.class)
. 我们也只能使用构造函数注入而不是方法注入或字段注入,这可能是因为此 Provider 的类型层次结构。
我试图找到某种要使用的方法.toProvider(FooProvider<Bar>.class)
,但我们都知道这不是有效的 Java 语法。有谁知道我如何.toProvider(Class<? extends Provider>)
在模块中使用 Guice 绑定器的方法,以便我可以使用通用提供程序来创建实现的具体类?让我知道我的问题是否有点令人困惑。