Guice: внедрение параметризованного конструктора - PullRequest
0 голосов
/ 18 октября 2011

Я новичок в Guice и искал в Google эту проблему, но не смог найти удовлетворительный ответ.

public class X {
    private Y y;

    public X() {
        y = new Y("abc", "xyz");
    }
}

public class Y {
    private String str1;
    private String str2;

    public Y(String str1, String str2) {
        this.str1 = str1;
        this.str2 = str2;
    }
}

Теперь я хочу добавить Y в конструктор класса X.

Я нашел AssistedInject, но разве это не для конструктора, параметры которого некоторые из них предоставлены Guice, а некоторые - вызывающей стороной.

Здесь, в этом случае, все параметры конструктора являютсяпредоставляется только вызывающим абонентом.

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

Вы можете использовать для этого аннотацию привязки (или встроенную @Named), см. 1-й вопрос в Guice FAQ

Это дает вам возможность избавиться от двух идентичных типов. Например

// in the module
bind(String.class).annotatedWith(Names.named("logical.env.id")).toInstance(System.getProperty("logical.env.id", "UK"));

// in the class
@Inject
public Foo(Bar barInstance, @Named("logical.env.id") String logicalEnvId) {
}
1 голос
/ 19 октября 2011

Я нашел AssistedInject, но не для конструктора, который имеет параметры, некоторые из которых предоставляются Guice, а некоторые из них предоставлено абонентом.

Correct.

Здесь, в этом случае, все параметры для конструктора предоставляются только по вызывающему абоненту.

Как я могу это сделать?

Просто сделайте это так, как вы: с new Y(...) в X конструкторе.

Почему вы хотите использовать Guice в этой ситуации?

...