Ошибка конфигурации Guice
Я пытаюсь использовать Google Guice со свойствами @Inject и @Singleton следующим образом:
Я имею:
- Модуль с пустым
configure()
метод. - Интерфейс IFoo
- Класс 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.