Ошибка компиляции поставщика GWT GIN

Я пытаюсь настроить свой модуль GIN для привязки ActivityManager запросов к DefaultActivityManagerProvider:

import com.google.inject.Provider;

public class DefaultActivityManagerProvider implements Provider<ActivityManager> {
    @Override
    public ActivityManager get() {
        return new ActivityManager(new MyDefaultActivityMapper());
    }
}

Но когда я иду, чтобы на самом деле связать его:

public class MyAppGinModule extends AbstractGinModule {
    @Override
    protected void configure() {
        bind(ActivityManager.class).toProvider(DefaultActivityManagerProvider.class);
    }
}

Я получаю ошибку компиляции в операторе bind(...):

Bound mismatch: The generic method toProvider(Class<I>) of type
GinLinkedBindingBuilder<T> is not applicable for the arguments
(Class<DefaultActivityManagerProvider>). The inferred type
DefaultActivityManagerProvider is not a valid substitute for the
bounded parameter <I extends Provider<? extends ActivityManager>>

Что я здесь делаю неправильно?!? Я следовал бесчисленным примерам, таким как это one и не могу понять, почему я получаю сообщение об ошибке! Заранее спасибо!


person Community    schedule 17.11.2012    source источник
comment
А какая версия Guice и GWT? Вы гуглили это сообщение об ошибке, не так ли?   -  person Alan Stokes    schedule 18.11.2012
comment
GWT - 2.4, GIN - 2.0, Guice - 3.0 и да гугление/предварительные исследования (с нулевыми результатами) :-(   -  person    schedule 18.11.2012
comment
для ограниченного параметра › Думаю, вы можете пропустить часть сообщения об ошибке - оно должно указывать, какой тип, который он ожидает, соответствует границам. (EDIT: Бьюсь об заклад, универсальный метод toProvider(Class) также должен иметь некоторые дженерики)   -  person Colin Alworth    schedule 18.11.2012
comment
Хороший улов @Colin - я думаю, что StackOverflow анализировал некоторые общие вещи, потому что я добавил ошибку компиляции в виде кавычки блока (с начальным символом › вместо блока кода (с начальным четверным отступом). Я обновил ошибку компиляции и Подтверждено, что это соответствует тому, что показывает мне Eclipse. Еще раз спасибо!   -  person    schedule 18.11.2012
comment
Не уверен, что это имеет значение, но Provider, который я использую, это com.google.inject.Provider. Я выполнил поиск по типам для всего, что называется Provider в моем пути к классам, и увидел, что внутри javax.inject.jar есть javax.inject.Provider. Я использую неправильный Provider?   -  person    schedule 18.11.2012
comment
com.google.inject.Provider расширяет javax.inject.Provider, так что это не должно вызывать проблем; обычно вы придерживаетесь первого в коде Gin / Guice. Хотя у других людей, похоже, была похожая проблема с GWT 2,2 / Джин 1,5.   -  person Alan Stokes    schedule 18.11.2012
comment
Это один и тот же класс ActivityManager в каждом месте?   -  person Alan Stokes    schedule 18.11.2012
comment
Нет, будут другие ActivityManager. Если вы думаете о масштабе (прототип или синглтон), я не беспокоюсь об этом прямо сейчас, я просто хочу, чтобы эта штука заработала в первую очередь!   -  person    schedule 18.11.2012
comment
Отказ от GIN, переход на DIY-DI< /а>.   -  person    schedule 19.11.2012
comment
Комментарий о «том же ActivityManager» пытался убедиться, что вы не привязываете com.a.ActivityManager, но просите ввести org.b.ActivityManager - поскольку они не совпадают, Guice (на самом деле, Java) думает, что вы говорите с ума. Поскольку единственное import, которое вы указали, предназначено для Provider, мы не можем сказать, правильно ли это было сделано.   -  person Colin Alworth    schedule 19.11.2012


Ответы (1)


toProvider не поддерживается должным образом

http://code.google.com/p/google-gin/wiki/GinFaq

http://code.google.com/p/google-gin/wiki/GuiceCompatibility

Поставщик должен быть общедоступным статическим

static class DefaultActivityManagerProvider implements Provider<ActivityManager> {
    @Override
    public ActivityManager get() {
        return new ActivityManager(new MyDefaultActivityMapper());
    }
}
person Rebzie    schedule 28.11.2012