2017-09-20 3 views
0

J'ai essayé de chercher ceci mais je n'ai pas vraiment trouvé de solution, donc j'ai décidé de poster une question.Réutiliser Fournir dans Guice basé sur les paramètres

Je travaille sur une application où un utilisateur va entrer une adresse IP (un périphérique SNMP) et mon application doit s'y connecter et travailler avec. Pendant l'exécution de l'application, l'utilisateur peut fournir une autre adresse IP, puis je dois me connecter à la seconde en gardant les deux connexions en vie (en tant que singletons).

Mon problème est que je ne suis pas capable d'envelopper ma tête autour de ce concept. Mon module de connexion est maintenant quelque chose comme ce qui suit:

@Override 
Configure() { 
    String ip = first ip; 
} 

@Provides 
Connect connect() { 
    // connect to ip 
    return connection; 
} 

Quelqu'un peut-il me donner quelques conseils ici?

Répondre

1

Vous devez probablement transmettre l'adresse IP en tant qu'argument pour votre constructeur de classe Connect. Vous pouvez alors regarder FactoryModuleBuilder afin que vous puissiez injecter des dépendances à votre classe Connect dans votre code. En ce qui concerne votre exigence concernant les célibataires, je ne suis pas sûr de ce que vous voulez dire là-bas. Un singleton signifie, par définition, qu'il n'y a qu'une seule instance d'une classe. Ici, vous en voulez deux (ou peut-être plus). Ce que je soupçonne, c'est que vous voulez au plus une seule instance Connect par chaîne IP dans l'ensemble de l'application. Si tel est le cas, votre usine doit être un peu plus intelligente que celle créée automatiquement par FactoryModuleBuilder. Il peut s'agir d'un singleton lui-même et stocker un index (map? Concurrente map? Cache? Cela dépend des exigences de sécurité de votre thread) des instances ip -> connect pour celles qui ont déjà été créées.

Espérons que ça aide.

+0

Je vais essayer et rapporter si cela a fonctionné, mais oui c'est la condition. Je veux fondamentalement réutiliser des connexions et en créer un nouveau seulement si l'adresse IP est différente. Donc, je vais utiliser une carte pour stocker les appareils actuellement connectés. – darkstar

+0

La carte elle-même devrait être un singleton: méfiez-vous de la sécurité des threads. – Luigi

+0

Marquer cela comme la bonne réponse puisque c'est ce qui m'a poussé dans la direction que je voulais. – darkstar