Pregunta

Total Guice novato aquí, he leído algunos artículos y visto el vídeo de introducción, eso es todo.

Aquí está mi viejo código simplificado que estoy tratando de "guicifiy". no puedo encontrar la manera de, ya que (por lo que yo entiendo), sólo puedo @inject-anotar uno de los dos constructores? ¿Cómo puede una clase llamada crear el uno o el otro caso? O voy a tener que refactorizar esto de alguna manera?

public class MyDialog extends JDialog {
    public MyDialog( JFrame parent, <other parameters...> ) {
        super( parent );
    }

    public MyDialog( JDialog parent, <other parameters...>) {
        super( parent );
    }
 }
¿Fue útil?

Solución

Sólo se puede inyectar en el ctor.

En función de cómo se utiliza esta clase, usted podría:

  • Se inyecta una fábrica en el código de cliente con dos "nuevos" métodos.
  • Rollo de todos los argumentos en uno y Héctor pasar null cuando no es necesario.
  

¿Cómo puede una clase llamada crear el uno o el otro caso?

Esto sugiere que las clases de llamadas querrán varias instancias de MyDialog? Luego hay que utilizar una fábrica de enrollado a mano (Assisted Inyectar puede manejar esto para usted si sólo tenía una ctor). No sé los detalles de lo que estás haciendo y es probable que estoy repitiendo lo que ya sabe, sino como una declaración suprimida me gustaría sugerir también la extracción de una interfaz de MyDialog y tienen la fábrica de devolverlos. De esta manera puede MyDialog falso en las pruebas.

Otros consejos

Inyección de Constructor es muy limpio. MLK es correcto, diciendo que se puede inyectar en un solo constructor.

Qué puede hacer es la inyección método de uso:

public class Smt {

    private int a;
    private Cereal cereal;
    private Personality personality;
    private ignition;

    public Smt() {
        this.a = 5;
    }

    public Smt(int a) {
        this.a = a;
    }

    @Inject
    public void setup(@CiniMini Cereal cereal, @Rastafarian Personality personality,
        Ignition ignition) {
        this.cereal = cereal;
        this.personality = personality;
        this.ignition = ignition;
    }
}

Lo que Guice va a hacer es llamar a su método de clase setup clase y proporcionar todas las inyecciones. Entonces haces lo mismo que en el constructor -. Asignar los objetos a su clase atributos

Me acuerdo con los comentarios anteriores. Sólo un adicional de pista: la inyección de constructor se supone que debe proporcionar todas las dependencias a las necesidades de la clase. Como dice MLK, un enfoque podría ser para anotar el constructor con la mayoría de los argumentos y luego refactorizar el otro para llamar a la ex pasando valores nulos cuando sea necesario.
Además, Guice 3.0 es compatible con la llamada Constructor enlaces que permiten al programador especificar qué constructor de usar. Ver rel="nofollow" aquí para más detalles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top