Я пытаюсь использовать guice и хочу создать синглтонский случайный клиент веб-сервиса в Java Play 2.6
На данный момент у меня есть клиент WS, и он загружается как модуль воспроизведения Java.Когда я запускаю приложение, нет проблем, мой клиент может использовать конфигурацию java play (com.typesafe.config.Config
), которая вводится.Но если я пытаюсь использовать мой клиент где-либо еще, я получаю сообщение об ошибке: No implementation for com.typesafe.config.Config was bound
.
Вот мой (очень простой) клиент:
import play.Logger;
import com.typesafe.config.Config;
@Singleton
public class MyClient {
final Config config;
@Inject
public MyClient(Config config) {
this.config = config;
Logger.warn("constructor called")
Logger.warn("Some config param:"+config.getString("some_param"))
}
public void doSomething() {
Logger.warn("doSomething() called")
}
}
Мой модуль, реализующий абстрактный модуль Guice:
import com.google.inject.AbstractModule;
public class MyClientModule extends AbstractModule {
@Override
protected void configure() {
bind(MyClient.class).asEagerSingleton();
}
}
Когда я приказываю Play использовать его в качестве модуля в applicationf.conf
, он работает (я получаю журналы предупреждений "Constructor called"
и "Some config param"
в консоли):
play {
modules {
enabled += external.MyClientModule
}
}
Но если я попытаюсь позвонить с моего HomeController
:
public class HomeController extends Controller {
public Result index() {
Injector myClientInjector = Guice.createInjector(new MyClientModule());
MyClient myClient = myClientInjector.getInstance(MyClient.class);
return ok(views.html.index.render());
}
}
, я получу следующую ошибку:
[CreationException: Unable to create injector, see the following errors:
1) No implementation for com.typesafe.config.Config was bound.
while locating com.typesafe.config.Config
for the 1st parameter of external.MyClient.<init>(MyClient.java:121)
at external.MyClientModule.configure(MyClientModule.java:8)
1 error]
Я почти уверен, что естьНесколько вещей здесь не так, каков будет правильный способ связать это и затем использовать это?