Я пытаюсь выполнить внедрение зависимостей в проекте javaFX.
У меня есть
@Singleton
public class WidgetFactory implements IWidgetFactory
Мой public class ZentaEditorModule extends MvcFxModule
содержит
@Override
protected void configure() {
super.configure();
//some other code
System.out.println("binding WidgetFactory");
bind(IWidgetFactory.class).to(WidgetFactory.class);
}
В моем public class ZentaApplication extends Application
У меня есть это, работает при инициализации приложения:
final Injector injector = Guice.createInjector(module);
System.out.printf(
"widgetFactory=%s\n", injector.getInstance(IWidgetFactory.class)
);
domainHandler = new DomainHandler(injector, editorModel);
И DomainHandler запускается так:
public class DomainHandler {
@Inject
private IWidgetFactory widgetFactory;
@Inject
private Injector injector;
public DomainHandler(
final Injector injector, final EditorModelItem editorModelItem
) {
System.out.printf(
"injector in domainHandler=%s\n",
injector
);
System.out.printf(
"injector2 in domainHandler=%s\n",
getInjector(null)
);
System.out.printf(
"widgetFactory in domainHandler=%s\n",
widgetFactory
);
System.out.printf(
"injector parameter=%s\n",
this.injector
);
}
@Inject
public Injector getInjector(final Injector injector) {
return injector;
}
}
И я получил это:
binding WidgetFactory
widgetFactory=org.rulez.demokracia.zenta3.editor.widgets.WidgetFactory@39957a81
injector in domainHandler=Injector[bindings=[ProviderInstanceBinding[key=Key[type=com.google.inject.Injector...
injector2 in domainHandler=null
widgetFactory in domainHandler=null
injector parameter=null
DomainHandler constructor
Вывод инжектора на самом деле содержит это:
LinkedKeyBinding[key=Key[type=org.rulez.demokracia.zenta3.editor.widgets.IWidgetFactory,
annotation=[none]],
source=org.rulez.demokracia.zenta3.editor.ZentaEditorModule.configure(ZentaEditorModule.java:152),
scope=Scopes.NO_SCOPE,
target=Key[type=org.rulez.demokracia.zenta3.editor.widgets.WidgetFactory,
annotation=[none]]],
Из этого кажется, что в мой экземпляр DomainManager ничего не вводится, ни в одной из аннотаций @Inject.Интересно, что в коде есть другие классы, в которые также вводится инжектор, и они работают.Так что, думаю, я что-то не так делаю при инициализации.Но что?