java - Guice CreationException - 没有绑定(bind) Foo 类型的实现

标签 java dependency-injection guice

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

所以我有这样一个类型:

class Foo {
   static final class Bar {}

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

为了使 Foo 可注入(inject),我需要满足对 params a 和 b,现在我提供 Type a 没问题 实现,它不为空,所以我在 包模块类。但是b呢?可以为空,怎么写 @Provides 一个可以为空的参数?我的猜测是 不应该是必需的,Guice 应该理解注释...... 但是有些东西不正常,我收到了这个错误:

1) java.util.Set<Foo$Bar> 没有实现被绑定(bind)了。

这是@Provides 方法(在 atm 上不起作用)

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

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

最佳答案

不对 Set<Bar> 进行任何绑定(bind)是有区别的并具有 Set<Bar> 的绑定(bind)那是 null .

你需要一个 @Provides返回 Set<Bar> 的方法(可能是 null )或类似 bind(Bar.class).toProvider(Providers.ofInstance(null)) 的东西为了能够向 Foo 提供第二个参数的构造函数。

另请注意,您的 @Provides Foo 的方法正在调用 @Inject直接注释构造函数,所以根本没有必要。我还想说最好绑定(bind)到一个空的 Set<Bar>而不是 null .

关于java - Guice CreationException - 没有绑定(bind) Foo 类型的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7048832/

相关文章:

java - 双倍流

java - Builder (android.content.Context )' is not public in ' io.realm.RealmConfiguration.Builder'。无法从外部包访问

java - 在 Java 中存储每第 n 行

java - 如何将单个实现绑定(bind)到 Guice 中的多个通用接口(interface)?

java - 快速简便地测试 OSGi 包的方法

.net - 许多-'small'组件的特定缺点?

c# - 带有对象初始化器和 LINQ 的 Ninject

c# - 使用 ASP.NET Core DI 注入(inject)工厂 Func

java - 与泛型的多重绑定(bind)

java - JSR-330 中的 Inject 和 Provider 有什么区别