我希望在课堂上有一个提供者成员,当'get'调用时,每次都会给我一个新对象。我怎么能这样做?
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()
}
}
注意我希望Guice注入这个新实例,所以我不能在提供程序实现中创建new MyClass()
。
答案 0 :(得分:10)
虽然@ GuillaumePolet的解决方案可行,但它并不是首选的方法。绑定MyClass
是正确的,但您不应为此注入Injector
(您应该避免一般注入Injector
。
对于您可以注射的任何类型,Guice可以自动注入该类型的Provider
。所以你应该做的是:
@Inject
Provider<MyClass> provider;
...
return provider.get();
答案 1 :(得分:1)
您可以使用以下代码绑定您的提供者:
bind(MyClass.class).toProvider(MyClassProvider.class);
在您的提供程序中,您可以注入Injector并请求一个新实例MyClass.class
@Inject
Injector injector;
...
return injector.newInstance(MyClass.class);
但你也可以简单地用你的类绑定:
bind(MyClass.class);
获得相同的结果(不完全是,取决于您使用提供商的方式)