Weld injection de dépendance paramétrée
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:
Code:
1 2 3
| @Inject
@MessageModel(value = "...")
Model monModel; |
J'ai donc essayé de modifier l'@interface MessageModel, ce qui donne :
Code:
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:
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:
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]:aie: