Question

Je suis en train d'utiliser Google Guice avec les propriétés @Inject et @Singleton comme suit:

Je:

  1. un module avec une méthode configure() vide.
  2. Une interface IFoo
  3. Une Foo classe (mise en œuvre IFoo), annoté avec @Singleton, avec un constructeur de paramètre moins annoté avec @Inject. C'est le seul constructeur annoté.

Les classes, le constructeur et l'interface sont publiques, et encore je reçois l'erreur suivante:

  

Pas de mise en œuvre pour IFoo était liée.

Était-ce utile?

La solution

Vous voulez dire que vous obtenez l'erreur quand vous le faites?

IFoo foo = injector.getInstance(IFoo.class);

Alors il est évident. Si le vide est comment configure() devrait Guice savoir avec quelle classe pour satisfaire la dépendance pour IFoo.

Il suffit d'ajouter ceci dans la méthode et il devrait @Singleton fonctionner. Maintenant Guice sait avec quelle classe pour satisfaire la dépendance.

bind(IFoo.class).to(Foo.class);

Si vous ne voulez pas configurer ce dans le module, vous pouvez annoter l'interface. par exemple.

@ImplementedBy(Foo.class)
public interface IFoo {
  ...
}

Les annotations ne Guice dit Injector.getInstance() retourner la même instance pour la classe (le modèle Singleton) chaque fois qu'une demande de la classe se fait via au lieu de créer <=> une nouvelle instance à chaque fois. Mais notez que cela est seulement Singleton par injection plutôt que par Classloader.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top