Passer des paramètres à Guice @Fournit une méthode
J'ai un Guice module qui a un @Fournit une méthode qui prend 2 paramètres et retourne la mise en œuvre de l'interface:
public class **ClientModule** extends **AbstractModule**{
@Override
protected void configure(){
}
@Singleton
@Provides
protected ClientInterfaces provideService(String param1, String param2){
returns something
}
}
Dans ma classe principale qui injecte le module, comment puis-je passer les paramètres à la @Fournit méthode?
public MainClass{
main(){
Injector injector = Guice.createInjector( new ClientModule());
MainClass mainClass = injector.getInstance(MainClass.class);
}
Cela lève une exception de pointeur Null param1
Vous devez déclarer les liaisons dans votre Guice-module pour les paramètres de la
provideService
méthode.OriginalL'auteur jwesonga | 2012-08-27
Vous devez vous connecter pour publier un commentaire.
Vous n'appelez pas un fournit la méthode vous-même, il est appelé par Guice lorsque vous premier besoin de l'accès (dans ce cas) votre ClientInterfaces mise en Œuvre.
Je suppose, vous avez besoin des paramètres de configuration pour initialiser votre ClientInterfaces.
Donc, essayez de Liaison de l'Annotation, le plus simple est @Nommé:
Bien sûr, vous avez normalement va lire myHost et "8080" à partir d'un fichier de propriétés du Système.accessoires au lieu de codage en dur des constantes.
La première fois, vous avez besoin d'Injecter un MyService, Guice remarquerez qu'il doit annoté Chaînes de répondre aux exigences de la méthode et de recherche pour les valeurs liées à la Annotatioon nom ...
Absolument. Mais je suppose un niveau débutant ici et n'a pas voulu ouvrir un autre tonneau ...
OriginalL'auteur Jan Galinski
Vous n'avez pas à passer des paramètres au fournisseur de méthode. Guice doit être en mesure de créer les paramètres de lui-même. Il ne fait pas de sens pour vous de passer les paramètres vous-même, car alors il n'y a pas besoin de Guice.
Si vous voulez Guice pour être en mesure de fournir les paramètres de
provideService
, ces paramètres devront soit un la liaison de l'annotation sur chaque paramètre. Depuis ils ont le même type, Guice ne peut pas savoir qui de la Chaîne de valeurs, il sait comment fournir doivent être transmis pour le paramètre.Si vous savez de quoi passer pour
param1
etparam2
à partir de votre code principal chemin d'accès, puis déplacezprovideService
quelque part qu'il peut être appelé directement. Pas besoin de Guice dans cette situation.Vous avez raison. J'-voté votre réponse puisque le mien a été bâclée et est trompeur, alors que votre exemple de code rend les choses très clairement.
OriginalL'auteur Michael Davidson