我的课程取决于一些服务需要少量参数然后进行网络调用,目前我正在传递这些参数,然后通过注入我的课堂的工厂创建这些服务。我需要将这些服务作为依赖注入,我知道我可以为它们创建提供程序,但在大多数示例中,我发现提供程序通常会绑定到像serveraddres
等固定值,但我需要在此期间给出值运行。如何使用自定义参数配置提供者?
下面是我的示例代码:
public SomeClass {
private final SomeFactory someFactory;
@Inject
SomeClass(SomeFactory factory) {
someFactory = factory;
}
public Foo getFoo(String fooId) {
FooService fooService = someFactory.getFooService(fooId);
return fooService.getFoo();
}
}
我需要做的是:
public SomeClass {
private final FooService fooService;
@Inject
SomeClass(FooService fooService) {
this.fooService = fooService;
}
public Foo getFoo(String fooId) {
return fooService.getFoo();
}
}
更新1
使用情况更加清晰:
@Provides
@RequestScoped
public SomeService provideSomeService(Dep1 dep1, String code) throws IOException {
return new SomeService.Builder()
.withApplicationName("Foo")
.setCode(code)
.build();
}
在这里,code
可以是null
默认情况下,当需要时我可以给它一些价值。
我可以以某种方式在提供程序创建之前将参数传递给提供程序吗?
你可以做到这一点只有在'code'可以注射:静态(因为一些配置),或通过一些提供者(在你的情况下,因为'代码'是恒定的,但与会话范围有关) –
@JérémieB如果我们在同一页面上,那么我们不能在Guice中用动态值做任何事情在这种情况下,我需要重组我的应用程序,对吧? – vivek