Guice не волшебство. Он будет внедряться в объект, только если он его создаст или вы попросите об этом. Если вы создаете свою собственную BoofPanel, вам нужно будет попросить Guice внедрить ее. Добавьте конструктор в Baz, который выглядит следующим образом:
public Baz(Injector injector) {
boofPanel = new BoofPanel(whatever, the, params, are);
injector.injectMembers(boofPanel);
}
Конструктор BoofPanel не должен ничего делать с переменной fooI; это может оставить это нулевым. Вам также нужно будет сделать переменную инжектора main окончательной, чтобы анонимный класс, созданный в main, мог перехватить ее и передать в конструктор Baz.
Если вы предпочли бы, чтобы BoofPanel был создан Guice, вам нужно будет предоставить все необходимые параметры конструктора для Guice и вызвать injectMembers на самом Baz.
РЕДАКТИРОВАТЬ : конкретные изменения в коде выше, после редактирования.
Добавьте final
к этому объявлению, чтобы сделать его пригодным для использования внутри анонимного внутреннего класса:
final Injector injector = Guice.createInjector();
Удалите эту строку, так как она не нужна:
injector.getInstance(MockFooImpl.class);
Добавьте инжектор к вызову конструктора Baz, чтобы получить его там, где создается BoofPanel (я также удалил ненужные final
здесь):
Baz baz = new Baz("one", "two", injector);
Добавьте инжектор в объявление конструктора Baz, чтобы получить его из основного метода:
public Baz(String one, String two, Injector injector) {
Добавьте инъекцию в boofPanel в конструктор Baz, сразу после строки new BoofPanel
, чтобы Guice ввел BoofPanel:
injector.injectMembers(boofPanel);
Вот и все.