4

有很多关于如何使用 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 绑定器的方法,以便我可以使用通用提供程序来创建实现的具体类?让我知道我的问题是否有点令人困惑。

4

1 回答 1

9
toProvider(new TypeLiteral<FooProvider<Bar>>() { });
于 2013-10-09T20:05:08.517 回答