gpt4 book ai didi

java - guice:在命令行运行时注入(inject)/绑定(bind)

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:00 26 4
gpt4 key购买 nike

我有以下问题:

   @Inject
MyClass(Service service) {
this.service = service;
}

public void doSomething() {
service.invokeSelf();
}

我有一个模块

bind(service).annotatedWith(Names.named("serviceA").to(ServiceAImpl.class);
bind(service).annotatedWith(Names.named("serviceB").to(ServiceBImpl.class);

现在我的问题是我想让用户通过命令行参数在运行时基础上动态选择注入(inject)。

public static void Main(String args[]) {
String option = args[0];
.....
}

我该怎么做?我是否必须为此创建多个模块?

最佳答案

如果您需要在运行时反复选择使用哪个实现 mapbinder非常合适。

你有这样的配置:

@Override
protected void configure() {
MapBinder<String, Service> mapBinder = MapBinder.newMapBinder(binder(), String.class, Service.class);
mapBinder.addBinding("serviceA").to(ServiceAImpl.class);
mapBinder.addBinding("serviceB").to(ServiceBImpl.class);
}

然后在您的代码中注入(inject) map 并根据您的选择获得正确的服务:

@Inject Map<String, Service> services;

public void doSomething(String selection) {
Service service = services.get(selection);
// do something with the service
}

您甚至可以使用 custom scopes 使用选定的服务填充注入(inject)器.

关于java - guice:在命令行运行时注入(inject)/绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663618/

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