簡體   English   中英

Guice綁定未使用@Named注釋完成

[英]Guice binding not done with @Named annotation

我有以下構造函數

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

我的模塊:

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

問題在於Guice不進行綁定。

現在,如果我刪除@Named批注,它將起作用。 成功調用了getName()方法。 但是,當添加@Named批注時,永遠不會調用getName() ,而我的構造函數最終將被注入一個空字符串。

@Provides注釋的方法中,只有一個返回String ,但是我仍然想為其命名,因為String是可以注入的非常常見的對象。

我還嘗試了configure()方法中的綁定(根據文檔,但仍然沒有。

有人知道我想念什么嗎? 我檢查了文檔無濟於事。

編輯:我確定我的進口是正確的

為我工作。 這是我用來驗證的代碼(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 {
}

按預期打印“ helloWorld”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM