2013-05-15 175 views
0

我使用Java 1.6與Guice 3.0和即時嘗試讓依賴注入工作。 我想從手動依賴注入切換到guice。Guice依賴注入方法,第一步

我的繼承人類wehere我想使用的依賴:

public class QSManager implements IQSManager { 
    private IPdfManager pdfManager; 
    @Inject 
    public void setPdfManager(IPdfManager pdfManager){ 
     this.pdfManager = pdfManager; 
    } 

而且我的繼承人管理器模塊

public class PdfManagerModule implements Module { 

    @Override 
    public void configure(Binder binder) { 
     binder.bind(IPdfManager.class).to(PdfManager.class).in(Singleton.class); 
    } 
} 

而我想要的相關性:

@Singleton 
public class PdfManager implements IPdfManager { 

但是,如果我跑它永遠不會注入依賴。例如:

  1. 我創建了主應用程序:QSManager manager = new QSManager(params);
  2. 我嘗試注入:manager.test()其中test是一個System.out.println(pdfManager);返回null

任何人都可以指向正確的方向或向我顯示錯誤嗎?謝謝!

+1

一個TIPP:從來沒有使用「新「... –

回答

1

綁定在你的配置與接口:

bind(IQSManager.class).to(QSManager.class); 

,並使用吉斯創建您QSManager而不是使用new:當你是新來的DI

Injector injector = Guice.createInjector(new PdfManagerModule()); 
IQSManager manager = injector.getInstance(IQSManager.class); 
manager.test(); 
+0

即使我想將PdfManager注入到我的QSManager中? – MemLeak

+0

是的。 'Guice'在創建該實例時注入QSManager的依賴關係。如果你只是使用'new',則繞過Guice。看看https://code.google.com/p/google-guice/wiki/GettingStarted – condit

+0

@MemLeak,甚至沒有,但*因爲*你想要它。如果你想依賴注入工作,你*有*在任何你想要一個新實例的地方使用DI容器。畢竟,如果你不告訴它,Guice應該如何知道你想注入某些東西? –