Il existe de nombreuses ressources en ligne sur la manière d'utiliser un fournisseur Guice pour lier à une classe générique, telles que des entrées wiki comme celle-ci et des questions SOF comme celle-ci. Cependant, j'ai du mal à trouver une ressource sur la manière d'utiliser un fournisseur qui soit lui-même générique.
Par exemple, supposons que j'ai ce qui suit:
public interface Foo {
...
}
public class Bar implements Foo {
...
}
Comme vous pouvez le voir, Bar a un paramètre d'injection qui DOIT être dans le constructeur. Dans ma situation, nous ne pouvons pas déplacer ce paramètre vers une injection de champ ou de méthode.
Donc, maintenant je veux écrire un Provider pour Foo, mais qu'il renvoie une instance de Bar. Quelque chose comme ceci:
@Singleton
public class FooProvider extends Provider {
@Inject
public FooProvider(Object someParameterWeMustInjectIntoConstructor) {
...
}
...
@Override
public Foo get() {
return new Bar(...);
}
...
}
Remarquez comment cette classe est un singleton qui dépend de l'injection Guice elle-même, donc le Provider doit être configuré en utilisant .toProvider(FooProvider.class)
. Nous ne pouvons également utiliser que l'injection de constructeur et non l'injection de méthode ou de champ, peut-être en raison d'une hiérarchie de types avec ce Provider.
J'essaie de trouver une sorte de moyen d'utiliser .toProvider(FooProvider.class)
, mais nous savons tous que ce n'est pas une syntaxe Java valide. Quelqu'un sait-il comment je peux utiliser la méthode .toProvider(Class)
d'un binder Guice dans un Module pour utiliser un Provider générique afin de créer une classe concrète d'une implémentation ? Faites-moi savoir si ma question est un peu confuse.