2016-11-18 81 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」。