3

我正在尝试将 Google Guice 与 @Inject 和 @Singleton 属性一起使用,如下所示:

我有:

  1. 具有空configure()方法的模块。
  2. 一个接口 IFoo
  3. 类 Foo(实现 IFoo),使用 @Singleton 注释,带有使用 @Inject 注释的无参数构造函数。这是单个带注释的构造函数。

类、构造函数和接口是公共的,但我仍然收到以下错误:

没有绑定 IFoo 的实现。

4

1 回答 1

6

你的意思是你在这样做时得到错误?

IFoo foo = injector.getInstance(IFoo.class);

那么很明显。如果configure()是空的,那么 guice 应该如何知道用什么类来满足IFoo.

只需在configure()方法中添加它,它应该可以工作。现在 guice 知道用什么类来满足依赖关系。

bind(IFoo.class).to(Foo.class);

如果您不想在模块中配置它,您可以注释接口。例如

@ImplementedBy(Foo.class)
public interface IFoo {
  ...
}

@Singleton注释只告诉 guice 每次通过发出对类的请求时为类返回相同的实例(单例模式),而Injector.getInstance()不是每次都创建一个新实例。但请注意,这只是每个 Injector 而不是每个 Classloader 的 Singleton。

于 2009-07-02T12:58:10.813 回答