Eclipse - Google Guice - PullRequest
       5

Eclipse - Google Guice

2 голосов
/ 13 августа 2010

Я пытался использовать Google Guice в разработке плагинов Eclipse. Я импортировал Guice jar в качестве другого проекта плагина. Но каким-то образом Guice не может ввести зависимость.

Есть идеи ???

Это сообщение об ошибке

com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for java.util.List<java.lang.String> was bound.
  while locating java.util.List<java.lang.String>
    for parameter 1 at com.checker.extension.provider.util.PluginUtils.<init>(Unknown Source)
  while locating com.checker.extension.provider.util.PluginUtils

1 error

EDIT1

Одна вещь, которую я хотел бы отметить, - это то, что конфигурация работает правильно, когда я использую обычное приложение Java , но это не так, когда я использую проект плагина

EDIT2 Ниже приведен код, который я использую

@Override
    protected void configure() {

        bind(List.class).toInstance(DIObjects.buildFolderNames);
    }

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

public static List<String> buildFolderNames;

и я инициализировал это поле.

Это проблема из-за разных загрузчиков классов eclipse и Guice ???

Ответы [ 4 ]

9 голосов
/ 13 августа 2010

Вам необходимо использовать TypeLiteral для выполнения такой привязки, например:

bind(new TypeLiteral<List<String>>(){}).toInstance(new ArrayList<String>());

Более подробная информация о привязках доступна здесь .

2 голосов
/ 25 августа 2010

У меня работает.Но я сделал что-то другое - я пошел в SpringSource Enterprise Bundle Repository и загрузил их пакет Guice 2.0 и его единственную зависимость, пакет AOP Alliance API 1.0.0.Затем я добавил зависимость от своего плагина в комплект Guice.Я создал статическую переменную-член, подобную вашей, инициализировал короткий список строк и привязал ее к List;затем в TableViewer создал провайдер контента, который получает инжектор и вызывает getInstance (List.class), преобразовывая возвращаемое значение в массив и возвращая его.Результат: мои строки видны в таблице.

Вот ссылки на страницы для двух комплектов.На каждой странице есть ссылки на бинарные и исходные файлы.Получить либо;импортируйте их в свое рабочее пространство;добавить зависимость из вашего пакета в пакет Guice;что должно сделать это.

http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.com.google.inject&version=2.0.0&searchType=bundlesByName&searchQuery=guice

http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.aopalliance&version=1.0.0

2 голосов
/ 13 августа 2010

Похоже, проблема конфигурации / аннотации для меня (на первый взгляд). Согласно этой статье вы должны аннотировать List, чтобы указать, какой тип списка вы хотите добавить.

Если в вашем коде правильная привязка, убедитесь, что пакеты, которые включают в себя классы привязки / аннотации, правильно экспортированы и правильно объявлены в конфигурации плагина. Может быть, Guice просто не видит привязок.

0 голосов
/ 13 августа 2010

Вы сделали что-то вроде этого:

bind (List.class) .to (ArrayList.class);

в вашем классе, который устанавливает ваши привязки?Поскольку List - это всего лишь интерфейс, поэтому guice не знает, какую реализацию выбрать.

...