Как повторно использовать существующий экземпляр объекта в Google Guice? - PullRequest
0 голосов
/ 30 июня 2019

Я новичок в Google Guice.На данный момент кажется, что каждый раз, когда создается новая привязка, создается новый объект.Если у вас есть два одинаковых объекта в качестве параметра конструктора (или поля и т. Д.) В двух разных классах, как повторно использовать первый экземпляр объекта в качестве аргумента конструктора второго объекта?Например:

public interface MyInterfaceA{
    //Method declarations
}
public class MyClassA implements MyInterfaceA{
    private MyInterfaceC myField;

    @Inject
    public MyClassA(MyInterfaceC myField){
        this.myField = myField;
    }

    //Methods, etc.
}
public interface MyInterfaceB{
    //Method declarations
}
public class MyClassB implements MyInterfaceB{
    private MyInterfaceC myField;

    @Inject
    public MyClassB(MyInterfaceC myField){
        this.myField = myField;
    }

    //Methods, etc.
}
public interface MyInterfaceC{
    //Method declarations
}
public class MyClassC implements MyInterfaceC{

    @Inject
    public MyClassC(){
        //Implementation
    }

    //Methods, etc.
}
public class MyModule extends AbstractModule{
    @Override
    protected void configure(){
        bind(MyInterfaceA.class).to(MyClassA.class);
        bind(MyInterfaceB.class).to(MyClassB.class);
        bind(MyInterfaceC.class).to(MyClassC.class);
    }
}

В этом примере я думаю, что конструктор MyClassA вызывается через Guice с новым экземпляром MyClassC,и конструктор MyClassB также вызывается с новым экземпляром MyClassC.Как мне сначала вызвать конструктор MyClassA с новым экземпляром MyClassC, но затем конструктор MyClassB с тем же экземпляром MyClassC с Guice?

1 Ответ

1 голос
/ 30 июня 2019

Поскольку это уже прокомментировано @ njzk2, я просто добавляю код к следующему.Здесь MyClassC будет предоставляться с тем же экземпляром объекта каждый раз, когда вводится.

public class MyModule extends AbstractModule{
    @Override
    protected void configure(){
        bind(MyInterfaceA.class).to(MyClassA.class);
        bind(MyInterfaceB.class).to(MyClassB.class);
        bind(MyInterfaceC.class).to(MyClassC.class).in(Singleton.class);
    }
}
...