Ошибка конфигурации Guice: реализация не была связана

Я пытаюсь заставить 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 класс помещены в другой модуль.
  • Это почти все, что есть сказать об этом.

    Приносим извинения за такой длинный пост и благодарим за терпение прочитать его до конца.

    Есть идеи о том, почему произошли ошибки и как их исправить?

    17
    задан Roman 27 December 2010 в 16:45
    поделиться