2010-03-12 14 views
0

J'ai essayé d'utiliser Grapher sur mon projet GIN. Mais essayer de créer un Injector pour donner l'InjectorGrapher n'a pas fonctionné.Utilisation de Grapher sur l'application GIN avec GinModuleAdapter

droit dans la première ligne de mon code:

Injector injector = Guice.createInjector(new GinModuleAdapter(new MyGinModule())); 

il plante avec

Exception in thread "main" java.lang.AssertionError: should never be actually called 
at com.google.gwt.inject.rebind.adapter.GwtDotCreateProvider.get(GwtDotCreateProvider.java:43) 
at com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:48) 
at com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45) 
at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:811) 
at com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42) 
at com.google.inject.Scopes$1$1.get(Scopes.java:54) 
at com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:48) 
at com.google.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42) 
at com.google.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66) 
at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:84) 
at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) 
at com.google.inject.BoundProviderFactory.get(BoundProviderFactory.java:56) 
at com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45) 
at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:811) 
at com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42) 
at com.google.inject.Scopes$1$1.get(Scopes.java:54) 
at com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:48) 
at com.google.inject.InjectorBuilder$1.call(InjectorBuilder.java:200) 
at com.google.inject.InjectorBuilder$1.call(InjectorBuilder.java:194) 
at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:804) 
at com.google.inject.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:194) 
at com.google.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:176) 
at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:113) 
at com.google.inject.Guice.createInjector(Guice.java:92) 
at com.google.inject.Guice.createInjector(Guice.java:69) 
at com.google.inject.Guice.createInjector(Guice.java:59) 
at com.me.myself.Grapher.main(Grapher.java:20) 

Qu'est-ce qui se passe?

+0

Je serais intéressé à faire cela aussi. Pouvez-vous partager comment votre main() a été faite? Qu'est-ce que vous liez les vues, par exemple? – PhiLho

Répondre

3

figured it out: Mon Module a la ligne suivante qui a causé GinModuleAdapter à étouffer (semble être un bug):

bind(Foo.class).asEagerSingleton(); 

Retrait "asEagerSingleton" fait tout pour travailler. Mais puisque ce n'est pas ce que je voulais, je l'ai converti en ceci, qui a aussi fonctionné.

@Provides @Singleton 
Foo getFoo() { 
    return new Foo(); 
} 
+1

Wow, il n'y a donc aucun moyen de faire des singletons sans écrire un fournisseur pour chacun? –

+0

J'ai rencontré le même problème, vous pouvez le contourner en ajoutant une interface et lier l'interface à la classe. Seulement alors j'ai été capable de le lier comme un singleton. Dans ce cas: bind (Foo.class) .to (FooImpl.class) .asEagerSingleton(); – levivanzele

+0

J'ai eu un problème similaire, mais pas avec un EagerSingleton. J'avais un bind (Messages.class) .in (Singleton.class) où Messages était une classe concrète. –