Toutes les réponses à la question "Guice Constructor Parameter" semblent être incomplètes d'une certaine manière. Voici une solution complète, incluant l'utilisation et un visuel :
interface FooInterface {
String getFooName();
}
// Annotez le constructeur et les paramètres assistés sur la classe d'implémentation.
class Foo implements FooInterface {
String bar;
@Inject
Foo(@Assisted String bar) {
this.bar = bar;
}
// return the final name
public String getFooName() {
return this.bar;
}
}
// Créez une interface d'usine avec une méthode create() qui ne prend que les paramètres assistés.
// L'interface FooFactory n'a pas de classe d'implémentation explicite (Guice Magic).
interface FooFactory {
Foo create(String bar);
}
// Lier cette usine à un fournisseur créé par AssistedInject.
class BinderModule implements Module {
public void configure(Binder binder) {
binder.install(new FactoryModuleBuilder()
.implement(FooInterface.class, Foo.class)
.build(FooFactory.class));
}
}
// Maintenant, utilisez-le :
class FooAction {
@Inject private FooFactory fooFactory;
public String doFoo() {
// Send bar details through the Factory, not the "injector"
Foo f = fooFactory.create("This foo is named bar. How lovely!");
return f.getFooName(); // "This foo is named bar. How lovely!"
}
}
Beaucoup d'aide ici : https://google.github.io/guice/api-docs/latest/javadoc/index.html?com/google/inject/assistedinject/FactoryModuleBuilder.html