2011-09-23 37 views
2

我想注入Provider<T>的提供者,在這樣的事情:如何注入使用吉斯

class Work { 
    Provider<Tool> provider; 
    @Inject 
    Work (Provider<Tool> provider) { this.provider = provider; } 
} 

Module看起來是這樣的:

protected void configure() { 
    bind (Tool.class).to(MyTool.class); 
    // Q: How do I bind this: 
    bind (new TypeLiteral<Provider<Tool>> {}).to (????); 
    // A: Turns out deleting these last 3 lines makes everything just right. 
} 

我想注入Provider<T>因爲Work類需要創建更多Tool對象並與它們一起工作。另外,我不確定是否需要對TypeLiteral<Provider<Tool>>進行綁定,但我認爲這是最接近這種情況的方法。

回答

3

您是否試過只是不綁定它?我想預計 Guice只是建立一個提供商,每次解決非提供商綁定。

"Injecting Providers"

對於每一個結合,註釋與否,噴射器具有內置的其供應商的結合。

所以我覺得只是結合Tool就足夠了。這至少值得一試:)(我很想聽起來更有自信,但我沒有那麼多Guice-fu,因爲我想...)

+0

你說得對,我還沒見過那部分(現在我覺得沒有RTFM很愚蠢)。我可以確認它的工作原理;)。謝謝 –

+0

Jon Skeet的權利。另一種方法是,綁定一個類創建一個Guice內部的默認提供者,它將被注入到該類提供者的任何請求中。 – dlamblin