2011-01-12 71 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