2014-07-26 101 views
1

我想在使用guice實例化子類時將依賴項注入父類。在下面的例子中,我試圖創建一個TrainingCommandData的實例,而我希望能夠在運行時使用Guice注入TelemetryServiceClient。我怎樣才能做到這一點?使用Guice,在子類中注入依賴項

public class TrainingCommandData extends CommandData { 

    private Intent intent; 

    public TrainingCommandData(UserCommandResource userCommandResource, Intent intent) { 
     super(userCommandResource); 
     this.intent = intent; 
    } 
} 

public class CommandData { 

    private TelemetryServiceClient telemetryServiceClient; 
    private UserCommandResource userCommandResource; 

    @Inject 
    public void setTelemetryServiceClient(TelemetryServiceClient telemetryServiceClient) { 
     this.telemetryServiceClient = telemetryServiceClient; 
    } 

    public CommandData(UserCommandResource userCommandResource) { 
     this.userCommandResource = userCommandResource; 
    } 
} 

回答

2

當您擴展一個類時,guice將負責爲您注入父依賴關係。 所以你只要讓Guice爲你創建一個TrainingCommandData的實例,你就可以自動獲得注入的TelemetryServiceClient。

有一些問題與上面的代碼,但:

  1. 你需要把「@Inject」您非默認構造函數...當然吉斯必須能夠創造出所有的參數爲你。如果你只是現在這些參數在運行時,看看輔助注入擴展
  2. 使用setter注入並不是一個好的選擇在你的用例...爲什麼你的commanddata表明可以設置一個新的實例運行時的服務?我不會提供setter,但使用字段注入,或者,如果你不喜歡那樣,構造器注入。