Christian
Christian

Reputation: 4104

Injecting singleton in guice module

I have written some modules with guice. These are working great. I have also some singletons or a logger I need in my modules which I want to inject into these modules.

For example I have my JpaModule where I need my Configuration.

ConfigurationModule:

@Singleton
public class ConfigurationModule extends AbstractModule {

  @Override
  protected void configure() {
    bind(Configuration.class).toProvider(ConfigurationProvider.class).in(Singleton.class);
  }
}

JpaModule:

public class JpaDaoModule extends AbstractModule {

  @Inject
  Configuration config;

  @Override
  protected void configure() {
    // ... Read config and do something
  }
}

Call to Guice:

Guice.createInjector(new ConfigurationModule(), new JpaDaoModule());

How can I accomplish this? Or how can I provide the configuration to the JpaModule the guicy way?

/Kind regards

Christian

Upvotes: 1

Views: 1438

Answers (1)

unguiculus
unguiculus

Reputation: 405

This is not possible. In the configure() method you set up your bindings. You cannot expect them to be available already. Also, modules are not eligible for injection per se. You can, however, get access to Guice-managed instances in providers or @Provides methods.

@Provides
@Named("myConfigItem")
String provideSomeConfigItem(Configuration config) {
    return config.get("myConfigItem");
}

Upvotes: 1

Related Questions