2011-06-22 12 views
17

Tengo una clase de acceso de base de datos genérica, que estoy vinculando utilizando la construcción TypeLiteral. Ahora en una prueba quiero burlarme de esa clase y, por lo tanto, he creado un Proveedor, que crea una instancia simulada. En mi prueba, quiero acceder a ese simulacro para definir su comportamiento. Ahora la pregunta es, ¿cómo puedo recuperar el objeto del inyector?Guice: ¿Cómo obtengo una instancia de un genérico envuelto en TypeLiteral?

Esa es mi definición de unión:

binder.bind(new TypeLiteral<GenericDbClass<Integer>>(){}).GenericDbClassProvider.class); 

Normalmente me gustaría tener una instancia de esta manera:

injector.getInstance(GenericDbClass.class); 

Pero como no soy vinculante la aplicación del GenericDbClass a la propia interfaz, i don No sé cómo hacer eso. ¿Creo que complicado?

¡Cualquier idea/ayuda es muy apreciada!

+0

Como una solución a corto plazo, simplemente extendí la interfaz genérica con una definición concreta, por lo que ahora puedo obtener una instancia. Aún así, ¿hay alguna manera de lograr la tarea de una manera más genérica? –

Respuesta

37

Utilice la instalación de Guice Key, que está hecha para este tipo de problema. En su caso

injector.getInstance(Key.get(new TypeLiteral<GenericDbClass<Integer>>(){}); 

hará el truco.

+14

'injector.getInstance (nueva clave >() {})' también funcionará si no necesita proporcionar ninguna anotación de enlace. – ColinD

Cuestiones relacionadas