Ошибка конфигурации Guice

Я пытаюсь использовать Google Guice со свойствами @Inject и @Singleton следующим образом:

Я имею:

  1. Модуль с пустым configure() метод.
  2. Интерфейс IFoo
  3. Класс Foo (реализующий IFoo), аннотированный @Singleton, с конструктором без параметров, аннотированным @Inject. Это единственный аннотированный конструктор.

Классы, конструктор и интерфейс общедоступны, и все же я получаю следующую ошибку:

Никакая реализация для IFoo не была связана.

1 ответ

Решение

Вы имеете в виду, что получаете ошибку при этом?

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

Ну тогда это очевидно. Если configure() пусто, как следует знать, с каким классом удовлетворить зависимость для IFoo,

Просто добавьте это в configure() метод, и это должно работать. Теперь guice знает, с каким классом удовлетворить зависимость.

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

Если вы не хотите настраивать это в модуле, вы можете аннотировать интерфейс. например

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

@Singleton аннотации только указывают guice возвращать один и тот же экземпляр для класса (шаблон Singleton) каждый раз, когда запрос к классу выполняется с помощью Injector.getInstance() вместо того, чтобы создавать новый экземпляр каждый раз. Но учтите, что это только Singleton на Injector, а не на Classloader.

Другие вопросы по тегам