2010-08-13 2 views
3

Я пытаюсь использовать Google Guice в разработке плагинов eclipse. Я импортировал Guice jar в качестве другого подключаемого проекта. Но почему-то Guice не может вводить зависимость.Eclipse - Google 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 ???

+0

Любое сообщение об ошибке? – Gopi

+0

Добавленная ошибка в вопросе .. –

+0

Нет ответов .. ??? –

ответ

9

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

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

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

-2

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

связывания (List.class) .то (ArrayList.class);

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

+1

это звучит как разумный ответ. может ли нижестоящий помочь комментировать? –

+0

Тот же ответ был повторен в обоих ответах, опубликованных ранее. Главный вопрос заключается в том, как интегрировать Guice в eclipse plug-in development env. –

+1

@VinayLodha, что раньше ответы вы имели в виду? Привет дал первый ответ в зависимости от времени. Автор вопроса спросил «Любые идеи?» Я думаю, что любой ответ относится к этому вопросу. –

2

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

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

2

Работы для меня. Но я сделал что-то другое - я пошел в 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

+0

Решения проблемы решены? Я замечаю, что щедрость прошла без награды. – Ladlestein

Смежные вопросы