Я не могу заставить Guice Multibindings работать с RoboGuice.Удлинители Guice MultiBindings, не работающие с RoboActivity
Когда моя деятельность расширяет андроидскую активность, многозадачность работает нормально. Когда моя деятельность распространяется RoboActivity, multibindings не работают, и следующее исключение:
3450-3450/com.example.guicetest E/AndroidRuntime﹕ FATAL EXCEPTION: main
com.google.inject.ProvisionException:
Unable to provision, see the following errors:
1) Multibinder is not initialized
at com.example.guicetest.MainActivity$1$1.configure(MainActivity.java:35)
(via modules: com.example.guicetest.MainActivity$1$1 ->
com.google.inject.multibindings.Multibinder$RealMultibinder)
while locating java.util.Set<com.example.guicetest.MyInterface>
for parameter 0 at com.example.guicetest.MyFooService.<init>(Unknown Source)
while locating com.example.guicetest.MyFooService
1 error
at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1018)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1044)
at com.example.guicetest.MainActivity$1.onClick(MainActivity.java:41)
Android Студия проект я создал декларирует следующие Gradle зависимости:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.google.guava:guava:18.0'
compile 'com.android.support:appcompat-v7:22.0.0'
compile('com.google.inject.extensions:guice-multibindings:4.0-beta5') {
exclude group: 'com.google.inject', module: 'guice'
}
compile('org.roboguice:roboguice:3.0.1') {
exclude group: 'com.google.inject', module: 'guice'
}
provided('org.roboguice:roboblender:3.0.1') {
exclude group: 'com.google.inject', module: 'guice'
}
}
Модуль является, как следующим образом (часть MainActivity):
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(MyFooService.class).in(Singleton.class);
Multibinder<MyInterface> processors = Multibinder.newSetBinder(binder(), MyInterface.class);
processors.addBinding().to(MyBarImpl.class);
processors.addBinding().to(MyQuxImpl.class);
}
});
MyFooService fooService =injector.getInstance(MyFooService.class);
Log.d("TEST", String.valueOf(fooService.implementations.size()));
}
});
Если я вызываю 'Gradle -q: приложение: зависимости' я получаю:
compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:22.0.0
| \--- com.android.support:support-v4:22.0.0
| \--- com.android.support:support-annotations:22.0.0
+--- com.google.inject:guice:3.0
| \--- javax.inject:javax.inject:1
+--- com.google.inject.extensions:guice-multibindings:3.0
\--- org.roboguice:roboguice:3.0.1
, но до сих пор у меня Dalvik ошибка:
com.android.dex.DexException: Multiple dex files define Lcom/google/inject/Module;
Когда я проверить 'Guice-3,0-no_aop' библиотека, класс 'com.google.inject.Module' есть и в «Guice -3.0-no_aop 'и' roboguice-3.0.1 '.
Я довольно застрял здесь :)
Можете ли вы включить и ваш модуль? – durron597
Скорее всего потому, что вы смешиваете Guice 3 с Guice 4. –
@diego Уверен, что у вас есть модуль как анонимный класс в 'com.example.guicetest.MainActivity'; Я могу сказать из вашего исключения stacktrace. – durron597