Я пытаюсь заставить DI работать с Guice, делая (как мне кажется) именно то, что указано в руководстве .
Я не могу объяснить проблему, потому что я не совсем понимаю - все кажется очень логичным и должно работать ... но это не так. Итак, я могу прикрепить только код и трассировку стека:
public class Runner {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new TestModule());
//next line throws the exception
JMeterComponent jMeterComponent =
injector.getInstance(JMeterComponent.class);
....
}
}
Как видите, я пытаюсь создать экземпляр объекта класса JMeterComponent
. Его конструктор (как вы увидите позже) принимает 3 аргумента: все они также должны быть созданы IoC и внедрены.
А вот TestModule
с конфигурацией этих 3 аргументов:
public class TestModule extends AbstractModule {
@Override
protected void configure() {
bind(Callable.class).annotatedWith(Names.named("JMeter"))
.to(JMeterTask.class);
bind(Processor.class).annotatedWith(Names.named("JMeter"))
.to(JMeterResultsProcessor.class);
bind(Renderer.class).annotatedWith(Names.named("JMeter"))
.to(JMeterResultsWikiRenderer.class);
}
}
Теперь , давайте посмотрим на эти конкретные реализации - JMeterTask
,
label)
com.google.inject
больше нет в любом другом классе кода Процессор
и Renderer
помещены в один модуль, а их jmeter
-реализации ( JMeterResultsProcessor
и другие) и JMeterComponent
класс помещены в другой модуль. Это почти все, что есть сказать об этом.
Приносим извинения за такой длинный пост и благодарим за терпение прочитать его до конца.
Есть идеи о том, почему произошли ошибки и как их исправить?