2009-07-02 83 views
2

我尝试使用谷歌吉斯与@注入和@Singleton性能如下:吉斯配置错误

我:

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

的类,构造函数和接口是公开的,而且我依然收到以下错误:

No implementation for IFoo was bound.

回答

5

你的意思是你这样做的时候错误?

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

那么很明显。如果configure()为空,那么guice应该知道什么类可以满足IFoo的依赖关系。

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

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

如果你不想在模块中配置此,你可以注释界面。例如

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

@Singleton注释只告诉吉斯返回相同的实例类(Singleton模式)每次该类的请求通过Injector.getInstance()制成的,而不是每次创建一个新的实例。但请注意,这仅仅是每个Injector的Singleton,而不是每个Classloader。

+1

Bar上的@Singleton注释不告诉Guiced它是IBar的具体实现吗? 我不喜欢有一个大模块() - 我更喜欢批注类。用Guist怎么做到这一点? – ripper234 2009-07-02 13:56:50