2011-01-12 45 views
5

根据吉斯的ThrowingProvider文件我有以下接口:吉斯ThrowingProvider问题

public interface IConfigurableProvider<T> extends ThrowingProvider<T, ConfigException> {} 

我有一个实现此接口的多个类,让我们假设我有以下几点:

public class SomethingProvider extends ConfiguredProvider implements IConfigurableProvider<Something> {} 

中当然这个类实现了必要的方法:

public Something get() throws ConfigException { /* ... */ } 

在我的模块,我在MyModule.java

ThrowingProviderBinder.create(binder()) 
    .bind(IConfigurableProvider.class, Something.class) 
    .to(SomethingProvider.class); 

下面的代码,但是当我开始我的应用程序产生以下错误:

6) No implementation for com.package.Something was bound. 
    while locating com.package.Something 
    for parameter 5 at com.package.OtherClass.<init>(OtherClass.java:78) 
    at com.package.MyModule.configure(MyModule.java:106) 

我真的不知道我应该从哪里开始寻找错误。

更新:它提供了即使我设定的范围,以及同样的错误:

ThrowingProviderBinder.create(binder()) 
    .bind(IConfigurableProvider.class, Something.class) 
    .to(SomethingProvider.class) 
    .in(Singleton.class); 
+0

正如接受的答案指出,我误解了`ThrowingProviderBinder`的用法。注入的构造函数应该等待提供者而不是提供的对象(并且应该检查异常处理)。 – 2011-01-13 10:34:22

回答

3

而不是注入Something,你需要注入的IConfigurableProvider<Something>

public class OtherClass { 
    @Inject 
    public OtherClass(IConfigurableProvider<Something> somethingProvider) { 
    ... 
    } 
} 

这是因为它只在OtherClass的代码中(或者使用Something的实例的任何代码)才能处理由提供者抛出的异常,如ConfigException在你的情况。

+0

但我不想修改构造函数。有什么方法可以达到我真正想要的吗? – 2011-01-13 08:13:10