TelemetryServiceClient

TelemetryServiceClient

我想在使用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建议可以在运行时设置服务的新实例?我不提供设置器,而是使用字段注入,或者,如果您不喜欢这样做,则使用构造函数注入。

10-08 08:15