-
Notifications
You must be signed in to change notification settings - Fork 95
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[question] Injecting http client #78
Comments
I don't understand the question, you're trying to bind an HTTP client in Guice? Or access things from Guice when building the HTTP client? What type of HTTP client? Are you sure this is related to the dropwizard-guice library? |
Hi, Jonathan. On 14 December 2015 at 21:45, Jonathan Haber notifications@github.com
|
Ah I think I understand now. This is possible, but because the Guice injector is created during dropwizard's initialize phase and the Environment isn't available until the run phase, the binding can't be created eagerly otherwise it will fail. Assuming you're running Guice in @Provides
@Singleton
public HttpClient providesHttpClient(ExampleConfiguration config, Environment environment) {
return new HttpClientBuilder(environment).using(config.getHttpClientConfiguration()).build();
} After which you should be able to inject |
Hi, thanks for quick responses! -----Исходное сообщение----- Ah I think I understand now. This is possible, but because the Guice injector is created during dropwizard's initialize phase and the Environment isn't available until the run phase, the binding can't be created eagerly otherwise it will fail. |
Is there any better approach to this than running in "development" ? There seems to be a lot of posts about inability to use Environment during the bootstrap phase, but no clearly documented solution - just in-passing mentions of governator's LazySingleton or then reconfiguring to run in "development" stage, which smacks of a hack. Did I miss some documentation that solves this issue 'properly'? TIA |
@mrwilby with dropwizard-guice the binding needs to be created lazily (since the Injector is creating during the initialize phase and the environment isn't available until the run phase). AFAIK there is no way to do what you want 'properly', the only workarounds I know of are the ones you mention. However, you should check out dropwizard-guicier which creates the injector during the run phase (with public class ExampleModule extends DropwizardAwareModule<ExampleConfiguration> {
@Override
public void configure(Binder binder) {
HttpClient httpClient = new HttpClientBuilder(getEnvironment())
.using(getConfiguration().getHttpClientConfiguration())
.build();
binder.bind(HttpClient.class).toInstance(httpClient);
}
} |
Thanks @jhaber . I actually discovered guicer the other day from reading another of your posts, and made the switch already. Guicier is much better for my use cases! Thanks! |
Hi.
Can't find solution, how can I instantiate and inject HttpClient to objects in guice module. Is it possible?
The text was updated successfully, but these errors were encountered: