Guice CreationException - 没有绑定Foo类型的实现

时间:2011-08-13 05:43:58

标签: java dependency-injection guice

需要一些帮助来理解这个错误以及解决它的可能方法。

所以我有一个类似这样的类型:

class Foo {
   static final class Bar {}

   @Inject
   Foo(TypeA a, @Nullable Set<Bar> b) {}
}

为了使Foo可注射,我需要实现依赖性 params a和b,现在我没有问题提供Type a 实现,它不是null,所以我有一个@Provides方法 包模块类。但是b呢?它可以为空,如何写 @Provides有一个可以为空的参数?我的猜测是 不应该被要求,Guice应该理解注释...... 但有些东西不能正常工作,我收到了这个错误:

1)没有绑定java.util.Set<Foo$Bar>的实现。

这是@Provides方法(它不起作用)

@Provides @Nullable
public Foo provideFoo(TypeA a, @Nullable Set<Foo.Bar> b) {
    return new Foo(a, b);
}

我知道嵌套类不是公共的,也不是构造函数,所以也许 guice无法访问它,但即使我将它们全部公开(我 不要真的想要)错误仍然存​​在......我有什么东西吗? 失踪?

1 个答案:

答案 0 :(得分:0)

Set<Bar>没有任何约束和Set<Bar> null的绑定之间存在差异。

您需要@Provides方法返回Set<Bar>(可能是null)或类似bind(Bar.class).toProvider(Providers.ofInstance(null))的方法,以便能够提供第二个参数到Foo的构造函数。

另请注意,@Provides的{​​{1}}方法只是直接调用Foo带注释的构造函数,因此根本不需要。我还说最好绑定到空@Inject而不是Set<Bar>