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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
@Inject
@MessageModel(value = "...")
Model monModel;
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
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]