我有以下构造函数
for(Item i : Container)
{
dosomething(i);
}
我的模块:
@Inject
public MyClass(Provider<TestClass> testProvider, @Named("myName") String name) {
//constructor stuff
}
问题在于Guice没有进行绑定。
现在,如果我删除@Provides
@Named("myName")
public String getName(SomeObject object) {
return object.getName();
}
注释,它就可以了。成功调用了@Named
方法。虽然添加了getName()
注释,但永远不会调用@Named
,并且我的构造函数最终会注入空字符串。
我的getName()
注释的方法中只有一个会返回@Provides
,但我仍然想命名它,因为String
是一个非常常见的对象,可以注入。
我还尝试了String
方法中的绑定(根据文档,但仍然没有。
任何人都知道我错过了什么?我检查了文档无济于事。
编辑:我确信我的导入是正确的答案 0 :(得分:1)
适合我。这是我用来验证的代码(guice 4.0):
package guice;
import com.google.inject.*;
import com.google.inject.name.Named;
public class Main {
public static void main(String[] args) {
Guice.createInjector(new MyModule()).getInstance(MyClass.class);
}
}
class MyClass {
@Inject
public MyClass(Provider<TestClass> testProvider, @Named("myName") String name) {
System.out.println(name);
}
}
class MyModule extends AbstractModule {
@Override
protected void configure() {
}
@Provides
@Named("myName")
public String getName(SomeObject object) {
return object.getName();
}
}
class SomeObject {
public String getName() {
return "helloWorld";
}
}
class TestClass {
}
打印&#34; helloWorld&#34;如预期的那样。