Dire que j'ai deux classes A et B, avec B selon A.Comment gérer les dépendances dynamiques avec PicoContainer?
public class A {}
public class B {
public B(A a) {}
}
Il est facile de résoudre B en une seule PicoContainer.
final MutablePicoContainer root = new PicoBuilder().build();
root.addComponent(new A());
root.addComponent(B.class, B.class);
System.out.println(root.getComponent(B.class));
Mais je voudrais avoir différentes instances de B
pour différentes sessions, avec des instances variables de A
. Je pense à quelque chose comme ça.
// during startup
final MutablePicoContainer root = new PicoBuilder().build();
root.addComponent(B.class, B.class);
// later, initialize sessions
final MutablePicoContainer session = new PicoBuilder(root)
.implementedBy(TransientPicoContainer.class)
.build();
session.addComponent(new A());
// some request
System.out.println(session.getComponent(B.class));
code ci-dessus ne fonctionne pas, parce que lorsque vous demandez session
un B
il demande au conteneur parent root
pour elle. B
est trouvé là, mais résolu seulement dans root
et ses parents, conduisant à UnsatisfiableDependenciesException.
Y at-il un bon moyen de faire ce travail? Ou est-ce un anti-pattern, et je résous le problème dans le mauvais sens?
Vous devriez mieux utiliser Spring! C'est prouvé en affaires. Tellement de gens se sont permis avec une migration picoc => parce que le pico container était instable et buggy ... –
Je ne suis pas d'accord. Pico est un * beaucoup * meilleur contenant que celui de Spring. L'avantage au printemps est sa communauté, pas sa technologie. – erickson
@Ronald - Je ne comprends pas exactement quel est votre objectif. Voulez-vous créer un nouveau A et un nouveau B correspondant pour chaque session? Pourquoi ne pas utiliser votre modèle de "conteneur unique" pour enregistrer A et B dans le conteneur de session plutôt que dans la racine? – erickson