Я без проблем использовал Guice в своем веб-приложении и хотел использовать его в настольном приложении. Я, конечно, упускаю одну вещь - какой-то способ рассказать моему приложению, как связать все и знать, что к чему. В веб-приложении у меня была декларация для этого в классе приложения, как мне сделать это в моем настольном приложении?
Вот соответствующий код, который я использую:
public class GuiceModule extends AbstractModule
{
@Override
protected void configure()
{
// Enable per-request-thread PersistenceManager injection.
install(new PersistenceManagerFilter.GuiceModule());
// Business object bindings go here.
bind(ProjectQueries.class).to(JdoProjectQueries.class);
bind(new TypeLiteral<Repository<Project>>() { }).to(JdoProjectRepository.class);
}
Мой основной класс:
@Inject
public Repository<Project> projectRepo;
public void createNewProject() {
...
projectRepo.persist(newProject);
}
Я, конечно, попадаю на projectRepo.persist (newProject);
Итак, что еще мне нужно сделать, чтобы это заработало?
EDIT:
Хорошо, эта часть теперь работает, спасибо :) Кажется, мне нужно сделать немного больше, чтобы упорство работало таким образом.
Я сейчас получаю NPE:
public void persist(T entity)
{
pmProvider.get().makePersistent(entity);
}
get () возвращает здесь ноль
похоже
установить (новый PersistenceManagerFilter.GuiceModule ());
недостаточно. Что мне нужно сделать? Мой класс репозитория начинается с:
public abstract class JdoRepository<T> implements Repository<T> {
private final Class<T> clazz;
private final Provider<PersistenceManager> pmProvider;
protected JdoRepository(Class<T> clazz, Provider<PersistenceManager> pmProvider) { this.clazz = clazz; this.pmProvider = pmProvider;
}
В моем PMF у меня есть:
public static class GuiceModule extends AbstractModule {
@Override protected void configure() {
bind(PersistenceManager.class).toProvider(new Provider<PersistenceManager>() {
public PersistenceManager get() {
return PersistenceManagerFilter.pm.get();
}
});
}
}