Quiero tener un miembro proveedor en la clase, que cuando me llamen me dará un nuevo objeto cada vez. ¿Cómo puedo hacer eso?
public class GuiceInjectionTest
{
@Inject
Provider<MyClass> provider;
public Provider<MyClass> get()
{
//I want a new instance every time here that is injected by guice
return provider.get()
}
}
Tenga en cuenta que quiero que esta nueva instancia sea inyectada por Guice, así que no puedo crear un new MyClass()
en la implementación del proveedor.
Respuestas
10 por respuesta № 1Si bien la solución de @GuillaumePolet funcionará, no es la forma preferida de hacerlo. Unión MyClass
es correcto, pero no debe inyectar el Injector
para esto (debe evitar inyectar el Injector
en general).
Para cualquier tipo que pueda inyectar, Guice puede inyectar automáticamente un Provider
de ese tipo Entonces, lo que debes hacer es esto:
@Inject
Provider<MyClass> provider;
...
return provider.get();
1 para la respuesta № 2
Puede vincular a su proveedor con el siguiente código:
bind(MyClass.class).toProvider(MyClassProvider.class);
En su proveedor, puede inyectar el inyector y solicitar una nueva instancia MyClass.class
@Inject
Injector injector;
...
return injector.newInstance(MyClass.class);
Pero también puede simplemente vincular su clase con:
bind(MyClass.class);
tener el mismo resultado (no exactamente, dependiendo de cómo use su proveedor)