WebアプリでGuiceを問題なく使用しましたが、デスクトップアプリで使用したいと思いました。私は確かに1つのことを見逃しています-すべてをバインドする方法をアプリに伝え、何が何であるかを知る方法です。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();
}
});
}
}