Внедрение зависимостей с использованием Guice с шаблоном DAO

Для небольшого побочного проекта, над которым я работаю, я пытался реализовать что-то вроде шаблона DAO для моих взаимодействий с БД и начал использовать Guice (впервые) для обработки DI для меня. Прямо сейчас у меня есть эта иерархия классов:

DAOImpl принимает ссылку на тип класса, поэтому мой клиент базы данных (mongo / morphia) может выполнить некоторую работу по инициализации и создать экземплярBasicDAO предоставлено morphia. Вот фрагменты соответствующих классов:

public class DAOImpl<T> implements DAO<T> {
  private static final Logger LOG = LoggerFactory.getLogger(DAOImpl.class);
  private static final String ID_KEY = "id";
  private final org.mongodb.morphia.dao.DAO morphiaDAO;

  @Inject
  public DAOImpl(Datastore ds, Class<T> resourceClass) {
    morphiaDAO = new BasicDAO(resourceClass, ds);

    LOG.info("ensuring mongodb indexes for {}", resourceClass);
    morphiaDAO.getDatastore().ensureIndexes(resourceClass);
  }
}

public class UserDAO extends DAOImpl<User> {
  @Inject
  public UserDAO(Datastore ds) {
    super(ds, User.class);
  }

  public User findByEmail(String email) {
    return findOne("email", email);
  }
}

Я знаю, что мне нужно сказать Guice связывать соответствующие классы для каждого универсальногоDAOImpl это расширяется, но я не уверен, как это сделать. Похоже, на это можно было бы ответить, но это не для меня. Я пробовал некоторые из следующих:

public class AppInjector extends AbstractModule {
  @Override
  protected void configure() {
    bind(com.wellpass.api.dao.DAO.class).to(DAOImpl.class);

//    bind(new TypeLiteral<SomeInterface<String>>(){}).to(SomeImplementation.class);
//    bind(new TypeLiteral<MyGenericInterface<T>>() {}).to(new TypeLiteral<MyGenericClass<T>>() {});
//    bind(new TypeLiteral<DAO<User>>() {}).to(UserDAO.class);

    bind(new TypeLiteral<DAO<User>>(){}).to(new TypeLiteral<DAOImpl<User>>() {});
  }
}

Вот некоторые из ошибок, которые я видел:

com.google.inject.CreationException: Unable to create injector, see the following errors:

1) No implementation for org.mongodb.morphia.Datastore was bound.
  while locating org.mongodb.morphia.Datastore
    for the 1st parameter of com.wellpass.api.dao.UserDAO.<init>(UserDAO.java:12)
  at com.wellpass._inject.AppInjector.configure(AppInjector.java:18)

2) java.lang.Class<T> cannot be used as a key; It is not fully specified.
  at com.wellpass.api.dao.DAOImpl.<init>(DAOImpl.java:19)
  at com.wellpass._inject.AppInjector.configure(AppInjector.java:14)

Любая помощь приветствуется.

Ответы на вопрос(1)

Ваш ответ на вопрос