2017-09-18 175 views
0

我有一個模塊,我在其中創建一個提供程序,並且該提供程序需要作爲另一個提供程序在同一模塊中的依賴項。但是,這對我的設置目前不可行。我該如何解決這個問題?還應該注意的是,所有的依賴都是第三方庫,所以我相信我不應該在我的模塊中綁定這個(根據我讀過的)。Guice:依賴注入@provides提供程序

不幸的是,由於NDA我不能提供實際的代碼,而是依賴層次的例子可以在下面看到:

public MyModule extends AbstractModule { 
    @Override 
    protected void configure() {} 

    @Singleton 
    @Provides 
    public Engine provideEngine(){ 
     Map<String, String> engineProperties = new HashMap<>(); 
     engineProperties.put("brand", "some brand"); 
     engineProperties.put("capacity", "2.6 litres"); 
     return new Engine(engineProperties); 
    } 

    @Inject 
    @Provides 
    public Car provideCar(Engine engine){ 
     Car car = new Car(engine); 
     return car; 
    } 
} 

是短暫的,我需要創建一個自定義的發動機,設立一些屬性然後使用該引擎作爲汽車創建的依賴項(請注意,我完全知道我無法在模塊中使用@Inject註釋注入,但是,我只是將其作爲參考以引用我想要實現的內容)。

回答

0

刪除@Inject註釋,你應該很好。如在the @Provides Method User's Guide page列出:

如果@Provides方法具有像@PayPal@Named("Checkout")結合註釋,吉斯結合註釋類型。依賴關係可以作爲參數傳遞給方法。在調用該方法之前,注射器將爲每個注射器執行綁定。

+0

我刪除了@Inject,並嘗試系統化依賴對象,即汽車提供商內的引擎,並且返回空值。似乎我在這裏錯過了一些東西。 – aDiT

+0

如果沒有看到你的代碼,或者(對於NDA來說)一個在可運行代碼中顯示相同問題的SSCCE,將很難移動到這裏。不過,要清楚的是,你*會讓Guice調用這些方法,而不是手動調用任何'@Proced'-annotated方法,對吧? –

+0

是的,我讓Guice調用這些方法。我會用正在運行的代碼更新這些代碼,請稍等片刻。 – aDiT