Eclipse - Google Guice
Я пытался использовать 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;
и я инициализировал это поле.
Это проблема из-за разных загрузчиков классов затмения и Guice???
4 ответа
Вам необходимо использовать TypeLiteral для выполнения такой привязки, например:
bind(new TypeLiteral<List<String>>(){}).toInstance(new ArrayList<String>());
Более подробная информация о привязках доступна здесь.
Похоже, проблема конфигурации / аннотации для меня (на первый взгляд). Согласно этой статье вы должны аннотировать List
чтобы указать, какой список вы хотите добавить.
Если привязка верна в вашем коде, убедитесь, что пакеты, которые включают классы привязки / аннотации, правильно экспортированы и правильно объявлены в конфигурации плагина. Может быть, Guice просто не может видеть привязки.
Работает для меня. Но я сделал что-то другое - я пошел в репозиторий SpringSource Enterprise Bundle и загрузил их пакет Guice 2.0 и его единственную зависимость, пакет AOP Alliance API 1.0.0. Затем я добавил зависимость от своего плагина в пакет Guice. Я создал статическую переменную-член, подобную вашей, инициализировал короткий список строк и привязал ее к List; затем в TableViewer создал провайдер контента, который получает инжектор и вызывает getInstance(List.class), преобразовывая возвращаемое значение в массив и возвращая его. Результат: мои строки видны в таблице.
Вот ссылки на страницы для двух пакетов. На каждой странице есть ссылки на бинарные и исходные файлы. Получить либо; импортируйте их в свое рабочее пространство; добавить зависимость из вашего пакета в пакет Guice; это должно сделать это.
Вы сделали что-то вроде этого:
связывания (List.class).to(ArrayList.class);
в вашем классе, который настраивает ваши binings? Поскольку List - это всего лишь интерфейс, поэтому guice не знает, какую реализацию выбрать.