I tried to use a Provider, but I am still not getting my
ExternalDataSourcesModule injected. I need to bind AppSettingsService
and use it in ExternalDataSourcesModule like this:

Injector injector = Guice.createInjector(new AbstractModule()
{
  @Override
  protected void configure()
  {
bind(AppSettingsService.class).toProvider(AppSettingsServiceProvider.class) 
.in(Singleton.class);
  }
}, new ExternalDataSourcesModule());

public class ExternalDataSourcesModule
{
  @Inject
  private AppSettingsService appSettingsService;

  @Override
  protected void configure()
  {
    for(DataSourceSettings dss :
appSettingsService.getDataSourceSettings())
    {
      // Configure the rest of the module with DataSourceSettings
    }
  }
}

What am I missing, I don't understand how using a Provider gives me
access to AppSettingsService in ExternalDataSourcesModule ?

Warren

On Mar 13, 3:03 pm, Warren Bell <[email protected]> wrote:
> So something like this:
>
> Injector injector = Guice.createInjector(new AbstractModule()
> {
>
>   @Override
>   protected void configure()
>   {
> bind(AppSettingsService.class).toProvider(AppSettingsServiceProvider.class) 
> .in(Singleton.class);
>   }
>
> }, new ExternalDataSourcesModule());
>
> public class ExternalDataSourcesModule
> {
>
>   @Inject
>   private AppSettingsService appSettingsService;
>
>   @Override
>   protected void configure()
>   {
>     // use appSettingsService to configure rest of this module
>   }
>
> }
>
> Will AppSettingsService get injected into ExternalDataSourcesModule ?
>
> Thanks,
>
> Warren Bell
>
> On 3/13/12 2:40 PM, Noctarius wrote:
>
>
>
>
>
>
>
> > Hi Warren,
>
> > I would use a Provider and inject depending information to that
> > provider.
>
> > Cheers Noc
>
> > Am 13.03.2012 22:27, schrieb Warren:
> >> How do I change the following code so that both modules are configured
> >> in one injector instead of two?
>
> >> Injector parentInjector = Guice.createInjector(new AbstractModule()
> >> {
>
> >>        @Override
> >>        protected void configure()
> >>        {
> >>                bind(AppSettingsService.class).in(Singleton.class);
> >>        }
>
> >> });
> >> AppSettingsService appSettingsService =
> >> parentInjector.getInstance(AppSettingsService.class);
> >> Injector childInjector = parentInjector.createChildInjector(new
> >> ExternalDataSourcesModule(appSettingsService));
>
> >> public class ExternalDataSourcesModule
> >> {
>
> >>        @Override
> >>        protected void configure()
> >>        {
> >>                // use AppSettingsService to configure rest of this module
> >>        }
>
> >> }
>
> >> AppSettingsService needs to be bound and needs to be used in
> >> ExternalDataSourcesModule. I have tried @Provides in
> >> ExternalDataSourcesModule and have gotten it to work, but it doesn't
> >> feel right having to set-up AppSettingsService as a singleton with
> >> getInstance(), plus I would like to inject dependencies into it.
>
> >> public class ExternalDataSourcesModule
> >> {
>
> >>        @Provides
> >>        @Singleton
> >>        AppSettingsService provideAppSettingsService()
> >>        {
> >>                return AppSettingsService.getInstance();
> >>        }
>
> >>        @Override
> >>        protected void configure()
> >>        {
> >>                // use AppSettingsService to configure rest of this module
> >>                AppSettingsService  appSettingsService =
> >> AppSettingsService.getInstance()
> >>        }
>
> >> }
>
> >> I would like to do this:
>
> >> Injector injector = Guice.createInjector(new AbstractModule()
> >> {
>
> >>        @Override
> >>        protected void configure()
> >>        {
> >>                bind(AppSettingsService.class).in(Singleton.class);
> >>        }
>
> >> }, new ExternalDataSourcesModule());
>
> >> public class ExternalDataSourcesModule
> >> {
>
> >>         @Inject
> >>         private AppSettingsService appSettingsService;
>
> >>        @Override
> >>        protected void configure()
> >>        {
> >>                // use appSettingsService to configure rest of this module
> >>        }
>
> >> }
>
> >> I think this is wanting the chicken before the egg. Using a child
> >> injector caused other problems, see my previous post.
>
> >> Any help would be appreciated.
>
> >> Thanks,
>
> >> Warren

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.

Reply via email to