我已經在我的web應用程序中使用了Guice,沒有任何問題,我想在桌面應用程序中使用它。我肯定錯過了一件事 - 以某種方式告訴我的應用程序如何綁定一切,並知道是什麼。在Web應用程序中,我在Application類中聲明瞭這一點,我應該如何在我的桌面應用程序中執行此操作?Google 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)的;
那麼,我還需要做些什麼才能使它工作?
編輯:
好了,現在這部分的工作,謝謝:)看來我需要做的多一點,雖然使持續工作的方式。
我在這裏得到NPE現在:
public void persist(T entity)
{
pmProvider.get().makePersistent(entity);
}
的get()返回null這裏
它看起來像 安裝(新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();
}
});
}
}
好的,那解決了那個問題。看起來我需要發起至少一件事。 現在我在這裏得到NPE: public void persist(T entity) {pmProvider.get()。makePersistent這個(實體); } – Paul
它看起來像 安裝(新的PersistenceManagerFilter.GuiceModule()); 是不夠的。我需要做什麼? 我的倉庫類開始: 公共抽象類JdoRepository實現庫 { 私人最終級 clazz中; private final Provider pmProvider; protected JdoRepository(Class clazz,Provider pmProvider) { this.clazz = clazz; this.pmProvider = pmProvider; } –
Paul
在我PMF我: 公共靜態類GuiceModule擴展AbstractModule { @覆蓋 保護無效配置(){ 綁定 (PersistenceManager.class).toProvider(新供應商(){ public PersistenceManager get() { return PersistenceManagerFilter.pm.get(); } }); } } –
Paul