我的課程取決於一些服務需要少量參數然後進行網絡調用,目前我正在傳遞這些參數,然後通過注入我的課堂的工廠創建這些服務。我需要將這些服務作爲依賴注入,我知道我可以爲它們創建提供程序,但在大多數示例中,我發現提供程序通常會綁定到像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