Bonjour,
J'essaie depuis un moment de mettre en place une injection paramétrée, mais je n'arrive pas à comprendre comment fonctionne le mécanisme et je n'ai pas réussi à trouver la bonne formule après de multiples essais.
Le but est de l'utiliser avec un @Produces qui créera un objet "Model" en fonction d'un paramètre "nomModel".
J'aimerais que l'injection ressemble à cela au final:
J'ai donc essayé de modifier l'@interface MessageModel, ce qui donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 @Inject @MessageModel(value = "...") Model monModel;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 @Qualifier @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER }) public @interface MessageModel { String value(); // OU String modelName(); }
Jusqu'ici, tout va bien (du moins je pense). Par contre, je n'ai aucune idée de la manière de faire pour récupérer ce paramètre dans le @Produces.
J'ai essayé ceci (vu dans la documentation de weld) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class ModelFactory { @Produces @MessageModel (value = "") Model createModel(final InjectionPoint ip) { return (new Model (ip.getAnnotated().getAnnotation(MessageModel.class).value()); } }
J'ai également essayé quelque chose du genre de (et plusieurs autres variantes) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 @Produces @MessageModel Model createModel(final InjectionPoint in_injectionPoint, final String value) { [...] }
Mais je n'obtiens aucun résultat probant ; je me retrouve au mieux avec une dépendance non-satisfaite à l'exécution :
org.jboss.arquillian.impl.event.FiredEventException: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Model] with qualifiers [@MessageModel] at injection point [[field] @MessageModel @Inject private eu.aznetwork.jazee.sandbox.logs.test.DBTestCase.model]![]()




Répondre avec citation



Partager