我正在尝试将 Google Guice 与 @Inject 和 @Singleton 属性一起使用,如下所示:
我有:
- 具有空
configure()
方法的模块。 - 一个接口 IFoo
- 类 Foo(实现 IFoo),使用 @Singleton 注释,带有使用 @Inject 注释的无参数构造函数。这是单个带注释的构造函数。
类、构造函数和接口是公共的,但我仍然收到以下错误:
没有绑定 IFoo 的实现。
我正在尝试将 Google Guice 与 @Inject 和 @Singleton 属性一起使用,如下所示:
我有:
configure()
方法的模块。类、构造函数和接口是公共的,但我仍然收到以下错误:
没有绑定 IFoo 的实现。
你的意思是你在这样做时得到错误?
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。