Guice ThrowingProvider проблема - PullRequest
5 голосов
/ 12 января 2011

Согласно документации ThrowingProvider Guice, у меня есть следующий интерфейс:

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);

1 Ответ

3 голосов
/ 13 января 2011

Вместо того, чтобы вводить Something, вам нужно ввести IConfigurableProvider<Something>:

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

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

...