我想在使用guice实例化子类时将依赖项注入到父类中。在下面的示例中,我尝试创建TrainingCommandData
的实例,同时希望能够在运行时使用Guice注入TelemetryServiceClient
。我怎样才能做到这一点?
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;
}
}
最佳答案
当您扩展类时,guice将为您处理父依赖项的注入。
因此,您只需让Guice为您创建TrainingCommandData的实例,即可自动获得TelemetryServiceClient注入。
上面的代码有一些问题:
您需要在非默认构造函数上放置“ @Inject” ...当然,Guice必须能够为您创建所有参数。如果现在仅在运行时这些参数,请查看辅助注射扩展
在您的用例中,使用setter注入不是一个好选择……为什么您的commanddata建议可以在运行时设置服务的新实例?我不提供设置器,而是使用字段注入,或者,如果您不喜欢这样做,则使用构造函数注入。