gpt4 book ai didi

guice - 使用 Google Guice 在运行时注入(inject)依赖项

转载 作者:行者123 更新时间:2023-12-05 06:41:56 27 4
gpt4 key购买 nike

我正在考虑在我的应用程序中使用 Guice for DI,我应该能够在运行时交换实现。下面提供了一个示例来说明要求:

class ValidationEngine {
public void validate(ValidationService vs) {}
}

class Client1_ValidationService implements ValidationService {}
class Client2_ValidationService implements ValidationService {}

上述实现之一应该绑定(bind)到基于客户端名称的运行时验证函数,比如 Client1 或 Client2

我想像这样更改 ValidationEngine:

class ValidationEngine {   
@Inject
@Named("vServicee") ValidationService vs;

public void validate() {
vs.validate()
}
}

上述方法的问题在于@Named 注解的参数是静态的;事实上注释不接受运行时值。 Guice 中还有其他方法可以解决此类问题吗?

最佳答案

您可以通过它的构造函数将配置信息传递给您的 Guice 模块。

伪代码:

main() { // your main method
flags = parseFlags()
injector = guice.createInjector(new MyModule(flags.validator))
}

MyModule { // your guice module
constructor(validator): this.validator = validator;
configure() {
Class<ValidatorService> client_validator;
if this.validator == KNOWN_CLIENT1:
client_validator = Client1_ValidationService.class
else:
client_validator = Client2_ValidationService.class
bind(ValidationService.class).to(client_validator);
}
}

Guice 警告不要这样做,因为它会增加您测试的表面积。 https://github.com/google/guice/wiki/AvoidConditionalLogicInModules

关于guice - 使用 Google Guice 在运行时注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38853684/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com