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.