Как получить буквенную привязку или может сказать экземпляр из инжектора [Google Guice]

#java #dependency-injection #guice #guice-servlet

#java #внедрение зависимостей #guice #guice-сервлет

Вопрос:

У меня есть Dao<T> интерфейс, который реализован BaseDao<T> классом и BaseDao<T> позже расширен многими подклассами, подобными UserDao классу.

 interface Dao<T>{}

abstract class BaseDao<T> implements Dao<T>{}

class UserDao extends BaseDao<User>{}
  

Ниже приведена привязка guice

 bind(new TypeLiteral<Dao<User>>() {
        }).annotatedWith(Names.named("UserDao")).toProvider(UserDaoProvider.class);
  

Поставщик выглядит так..

 public class UserDaoProvider implements Provider<UserDao> {

    @Override
    public UserDao get() {
        return new UserDao();
    }

}
  

Теперь я пытаюсь получить его из инжектора guice

 injector.getInstance(Key.get(new TypeLiteral<Dao<User>>() {
                }, Names.named("UserDao")));
  

Но я получаю null

Пожалуйста, помогите решить проблему.

Комментарии:

1. Вы правильно зарегистрировали свой модуль? Guice.createInjector(new ServletModule(), new YourDaoModule()) ?

Ответ №1:

Мы можем получить экземпляр UserDao следующим образом

 injector.getInstance(UserDao.class);