Inyección de dependencia usando Guice con el patrón DAO

Para un pequeño proyecto paralelo en el que estoy trabajando, he estado tratando de implementar algo así como un patrón DAO para mis interacciones con el DB, y he comenzado a usar Guice (por primera vez) para manejar el DI por mí. En este momento tengo esta jerarquía de clases:

DAOImpl toma una referencia a un tipo de clase para que mi cliente de base de datos (mongo / morphia) pueda hacer un trabajo de inicialización e instanciar unBasicDAO proporcionado por morphia. Aquí hay fragmentos de las clases relevantes:

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

Sé que necesito decirle a Guice que vincule las clases relevantes para cada genéricoDAOImpl eso se extiende, pero no estoy seguro de cómo hacerlo. Parece que podría haber sido respondido, pero no está haciendo clic para mí. He intentado algunos de los siguientes:

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>>() {});
  }
}

Estos son algunos de los errores que he visto:

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)

Cualquier ayuda sería muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta