2016-11-18 77 views
-1

做我有下面的构造吉斯绑定不@Named标注

@Inject 
public MyClass(Provider<TestClass> testProvider, @Named("myName") String name) { 
    //constructor stuff 
} 

我的模块:

@Provides 
@Named("myName") 
public String getName(SomeObject object) { 
    return object.getName(); 
} 

的问题是,吉斯没有做绑定。

现在,如果我删除@Named注释,它的工作原理。成功调用getName()方法。虽然添加@Named注释时,getName()永远不会被调用,并且我的构造函数最终被注入一个空字符串。

我的方法中只有一个用@Provides注解返回String,但我仍然想给它起个名字,因为String是一个很常见的可以注入的对象。

我也曾尝试configure()方法中的结合(按照文件,但仍没有

任何人都知道我错过了什么,我检查了文档无济于事

EDIT?:我敢肯定,我的进口都正确

+0

您拥有的代码看起来非常合理;你正确使用'Named'。你是否100%肯定这不是一个陈旧的构建工件或未保存的文件的情况? –

+0

只需仔细检查你的'Named'注解的输入。 –

+0

这些是我的进口产品: 'import com.google.inject.name.Named;' 非常奇怪。我要去尝试一些更多的疑难解答。可能是我的环境有问题 – Tiberiu

回答

1

工作对我来说这是我用来验证码(吉斯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 { 
} 

打印如预期的那样,“helloWorld”。