The easy answer is to simply bind the child injector using a provider.
Dhanji.

On Sat, Aug 15, 2009 at 10:11 AM, Michael Burton <[email protected]> wrote:

>
> I have a class that requires an Injector to do some work (it needs to
> construct some objects on the fly and then injectMembers for them).
>
> class DoSomething {
>    @Inject protected Injector injector;
>
>    public void doIt() {
>        ...
>        injector.injectMembers(stuff);
>        ...
>    }
> }
>
>
> In my application, I have two levels of injector.  I have a master
> injector, created using Guice.createInjector(), and I have a few child
> injectors, created by calling master.createChildInjector().  I've
> verified that DoSomething was created using a binding in one of the
> child injectors.
>
> The weird thing is that if I inspect DoSomething.injector, I find that
> it is the MASTER injector, not the CHILD injector.  I would have
> expected the Injector to be the child injector since it was the child
> that instantiated DoSomething.
>
> This seems to be causing me problems like the following:
>
> E/AndroidRuntime( 1515): com.google.inject.ConfigurationException:
> Guice configuration errors:
> E/AndroidRuntime( 1515):
> E/AndroidRuntime( 1515): 1) A binding to
> com.google.inject.Provider<android.app.Activity> already exists on a
> child injector.
> E/AndroidRuntime( 1515):   while locating
> com.google.inject.Provider<android.app.Activity>
> E/AndroidRuntime( 1515):     for field at
> com.XXX.http.BaseHttpGet.activityProvider(Unknown Source)
> E/AndroidRuntime( 1515):   while locating com.XXX.model.ImageUtils
> $GetImage
> E/AndroidRuntime( 1515):
> E/AndroidRuntime( 1515): 2) A binding to com.XXX.http.Http already
> exists on a child injector.
> E/AndroidRuntime( 1515):   while locating com.XXX.http.Http
> E/AndroidRuntime( 1515):     for field at com.XXX.http.BaseHttpGet.http
> (Unknown Source)
> E/AndroidRuntime( 1515):   while locating com.XXX.model.ImageUtils
> $GetImage
> E/AndroidRuntime( 1515):
>
> My interpretation of that error is that when I call
> injector.injectMembers(), the master injector attempts to generate a
> few bindings that it can't find, but errors out because those bindings
> already exist in the child injector.
>
> Is there a way I can tell Guice to inject the "correct" Injector
> instead of always the root injector?  Or alternately, is there a way I
> can get the correct injector manually somehow?
>
> Cheers,
> Mike
> >
>

--~--~---------~--~----~------------~-------~--~----~
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