Am not sure it totally solves your issue but you've seen how to get a
TypeLiteral from a Class right?
http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/TypeLiteral.html#get(java.lang.Class)

2008/10/3 Rahul <[EMAIL PROTECTED]>:
>
>
> Context: I have a Store interface for saving various Entities -
> Project, ProjectGroup, ProjectNotifier - all extending from
> CommonUpdatableEntity:
>
> public interface Store<T extends CommonUpdatableEntity, Q extends
> Query<T>> {
>    public T save(T entity) throws StoreException;
>    // ...omitted for brevity.
> }
>
>
> and its implementation:
>
> public class JpaStore<T extends CommonUpdatableEntity, Q extends
> Query<T>> implements Store<T, Q> {
>  @Transactional
>  public T save(T entity) throws StoreException {
>     // ...omitted for brevity.
>    return savedEntity;
>  }
> }
>
>
> configured via a module:
>
> public class StoreModule extends AbstractModule {
>  protected void configure() {
>    bind(new TypeLiteral<Store<Project, Query<Project>>>() {
>         }).to(new TypeLiteral<JpaStore<Project, Query<Project>>>() {
>        });
>    bind(new TypeLiteral<Store<ProjectGroup, Query<ProjectGroup>>>() {
>        }).to(
>        new TypeLiteral<JpaStore<ProjectGroup, Query<ProjectGroup>>>()
> {
>        });
>    bind(new TypeLiteral<Store<ProjectNotifier,
> Query<ProjectNotifier>>>() {
>        }).to(
>        new TypeLiteral<JpaStore<ProjectNotifier,
> Query<ProjectNotifier>>>() {
>        });
>  }
> }
>
> In my web actions (Controllers of MVC), I would like to retrieve the
> appropriate Store instance based on the Entity the action is creating/
> updating.
>
> To mimic this, I quickly created the following unit test which
> attempts to get a Store instance in a similar manner:
>
> public class StoreTest{
>   @Inject
>   Injector injector;
>
>  //...omitted
>
>  @Test
>  public void testCreateProject() throws StoreException {
>    Project project = new Project();
>    project.setName("sample-project");
>    Store<Project, Query<Project>> store =
> getStoreInstance(Project.class);
>    Assert.assertTrue(null == project.getId());  // FAILS TO GET A
> STORE INSTANCE
>    project = store.save(project);
>  }
>
>  private <T extends CommonUpdatableEntity> Store<T, Query<T>>
> getStoreInstance(Class<T> entity) {
>    List<Binding<Store<T, Query<T>>>> bindings =
> injector.findBindingsByType(new TypeLiteral<Store<T, Query<T>>>() {
>    });
>    if (bindings.size() > 0) {
>      return bindings.get(0).getProvider().get();
>    }
>    return null;
>  }
>
> }
>
> So, basically I want:
> -  a JpaStore<Project, Query<Project>> instance for Project.class
> -  a JpaStore<ProjectGroup, Query<ProjectGroup>> instance for
> ProjectGroup.class
> -  so on ...
>
> My question - How can I do such an instance retrieval using Guice API
> at runtime?
>
> Thanks,
>
> Rahul
>
> >
>



-- 
James
-------
http://macstrac.blogspot.com/

Open Source Integration
http://open.iona.com

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to