我在我的网络应用程序中使用 Guice 没有问题,我想在桌面应用程序中使用它。我当然错过了一件事——某种方式告诉我的应用程序如何绑定所有内容并知道什么是什么。在 Web 应用程序中,我在 Application 类中对此进行了声明,我应该如何在我的桌面应用程序中执行此操作?
这是我正在使用的相关代码:
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);
那么,我还需要做什么才能让它发挥作用?
编辑:
好的,那部分现在可以工作了,谢谢:) 看来我需要做更多的事情才能使持久性以这种方式工作。
我现在在这里获得 NPE:
public void persist(T entity)
{
pmProvider.get().makePersistent(entity);
}
get() 在这里返回 null
它看起来像 install(new 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();
}
});
}
}