2011-01-12 3 views
5

Согласно ThrowingProvider документации Guice У меня есть следующий интерфейс:Guice 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) 

Я не знаю, где я должен начать искать ошибки ,

Update: Он обеспечивает ту же ошибку, даже если я установить масштаб, а также:

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

Как было принято в ответе, я неправильно понял использование «ThrowingProviderBinder». Инъекционный конструктор должен ждать провайдера вместо предоставленного объекта (и должно быть обработано проверенное исключение). –

ответ

3

Вместо инъекций Something, вам нужно впрыснуть IConfigurableProvider<Something>:

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

Это потому что он находится только в коде OtherClass (или любом коде, который использует экземпляр Something), вы можете иметь дело с исключениями, отправленными Поставщиком, такими как ConfigException в вашем случае.

+0

, но я не хочу изменять конструкторы. есть ли способ достичь того, чего я действительно хочу? –

+1

Я думаю, что забуду «ThrowingProvider» и просто использую интерфейс «Provider» и обернуваю исключение источника в «ProvisionException» –