2011-02-25 13 views
7

Entiendo los beneficios de usar la inyección de constructor sobre la inyección de setter, pero en algunos casos solo debo seguir con la inyección basada en setter. Mi pregunta es cómo inyectar miembros de todas las clases de inyección basadas en setter usando el método injector.injectMembers()?Método de Guice injectMembers

//I am calling this method in init method of my application 
private static final Injector injector = Guice.createInjector(new A(), new B()); 

//Injecting dependencies using setters of all classes bound in modules A and B 
injector.injectAllMembers()?? 
+1

¿Podría dar un ejemplo de código de certación de casos de uso? –

+0

Guice ya lo hace. ¿De verdad estás teniendo un problema? – jabbie

Respuesta

10

¿Por qué necesita inyectar dependencias manualmente?

Guice inyecta dependencias en los campos y métodos de forma automática. Uso:

YourClass yourClass = injector.getInstance(YourClass.class); 

Guice documentación:

Siempre Guice crea una instancia, realiza esta inyección automática (después de la primera realización constructor inyección), por lo que si usted es capaz de dejar Guice crea todos tus objetos para ti, , nunca necesitarás usar este método.

que necesita inyectarse miembros por sí mismo solamente en una instancia creada manualmente así:

YourClass yourClass = new YourClass(); 
injector.injectMembers(yourClass); 

o puede usar algo así:

public class YourClassProvider implements Provider<YourClass> { 

    private final Injector injector; 

    @Inject 
    public YourClassProvider(Injector injector) { 
     this.injector = injector; 
    } 

    public YourClass get() { 

     YourClass yourClass = new YourClass(); 
     injector.injectMembers(yourClass); 

     return yourClass; 
    } 
} 

En cualquier caso, los emisores de YourClass debe ser anotado con @Inject.

+0

Coz Guice no está creando instancias de esas clases, estoy usando Guice Provider para obtener las instancias de esas clases desde otro lugar. – Abidi

+0

Ver el código en la respuesta actualizada. Espero que ayude – Pavel

+1

Se recomienda inyectar un 'MemberInjector ' cuando quiera hacer esto en lugar de todo el 'Injector '. – ColinD