I am literally meaning this:

"Are things bound in the parent module accessible in the private
module -- as in the module itself"

This is currently what I am doing now with the injectors and
childinjectors.. Since the logic are that childs only can depend on
parents. Im running a very dynamic configuration environment, where
modules are discovered at runtime, thats why it has to be this way.

regards Nino

2011/10/20 Sam Berlin <[email protected]>:
> Yes, stuff from parent modules are accessible to things bound in the private
> modules.  Things bound in private modules are not accessible to things bound
> in parent modules unless the bindings are exposed.
> As far as the question, "What if I need stuff that are setup in parent
> module injected in the private module?"  -- This can be a trick question.
>  If you literally mean, "Are things bound in the parent module accessible in
> the private module -- as in the module itself" then the answer is no.  If
> you mean are things from the parent module available to objects setup
> through the private module's bindings, then the answer is yes.
> For illustration:
> ParentModule {
>    configure() {
>        bind(Foo.class);
>        install(new PrivateModule() {
>           @Inject Foo foo;
>           configure() {
>               if (foo.toggle()) {
>                 bind(Bar.class);
>               } else {
>                 bind(Baz.class);
>  }}});}} // lots of closing braces
> The above doesn't work.  Nothing can be injected into Modules or
> PrivateModules, because Modules are how Guice figures out what can be
> injected in the first place.  You have a chicken/egg problem if you want to
> inject things into Modules.
> BUT! ... if you remove the @Inject and the if/else from the PrivateModule,
> and you just want to see if Bar can have an @Inject Foo in it, the answer is
> yes.
> sam
> On Thu, Oct 20, 2011 at 1:11 PM, nino martinez wael
> <[email protected]> wrote:
>>
>> Aha! so if I create a private module in a module then it will act as a
>> childinjector and get stuff from the parent module acesible to it?
>> What if I need stuff that are setup in parent module injected in the
>> private module?
>>
>> 2011/10/20 Sam Berlin <[email protected]>:
>> > PrivateModules are effectively child injectors.  There's no way to
>> > explicitly create a "child injector" within a Module, PrivateModule is
>> > the
>> > only tool you're given.  So it's easiest to illustrate within Modules
>> > using
>> > PrivateModules.  Creating child injectors at runtime follows the same
>> > rules.
>> > sam
>> >
>> > On Thu, Oct 20, 2011 at 12:47 PM, nino martinez wael
>> > <[email protected]> wrote:
>> >>
>> >> Although in your text you dont mention childinjectors... only
>> >> submodules?
>> >>
>> >> 2011/10/20 nino martinez wael <[email protected]>:
>> >> > I think its exactly what you are writing I am doing thats why i don't
>> >> > understand the error. I don't even bind more than one interface of
>> >> > the
>> >> > same type on any level..
>> >> >
>> >> > 2011/10/20 Sam Berlin <[email protected]>:
>> >> >> Do you have a concrete example of a few bindings and how you want
>> >> >> them
>> >> >> organized? I'm having trouble understanding what you're going for.
>> >> >> Here's some examples of visibility with private modules & bindings:
>> >> >> ParentModule binds Foo & PrivateSubModuleA & PrivateSubModuleB
>> >> >>    PrivateSubModuleA binds Bar, Baz & PrivateSubSubModuleA,
>> >> >> exposes Baz
>> >> >>      PrivateSubSubModuleA binds & exposes Buz
>> >> >>    PrivateSubModuleB binds Bar, Boz & PrivateSubSubModuleB,
>> >> >> exposes Boz
>> >> >>      PrivateSubSubModuleB binds & exposes Buz
>> >> >> Foo cannot be bound in any module other than ParentModule because
>> >> >> all
>> >> >> modules already see Foo.  Foo can be injected by anything, since
>> >> >> it's
>> >> >> available everywhere.
>> >> >> Bar can be bound in both PrivateSubModuleA & PrivateSubModuleB
>> >> >> because
>> >> >> they
>> >> >> are sibling private modules and the binding isn't exposed.
>> >> >>  Bar cannot
>> >> >> be
>> >> >> bound in PrivateSubSubModuleA or PrivateSubSubModuleB, because their
>> >> >> parent
>> >> >> modules have Bar bound.  Foo cannot inject Bar, because it isn't
>> >> >> visible to
>> >> >> things from ParentModule.
>> >> >> Baz cannot be bound in any module other
>> >> >> than PrivateSubModuleA because
>> >> >> all
>> >> >> modules already see Baz (since it's exposed to ParentModule).
>> >> >>  Baz can
>> >> >> be
>> >> >> injected by anything, since it's available
>> >> >> everywhere.
>> >> >> Buz can be bound in the SubSub modules, because they are effectively
>> >> >> the
>> >> >> same namespace as Bar -- visible to the Sub & SubSub modules only.
>> >> >>  Foo cannot inject Buz, because it isn't visible to things from
>> >> >> ParentModule.
>> >> >> Boz cannot be bound in any module other than PrivateSubModuleB
>> >> >> because
>> >> >> all
>> >> >> modules already see Boz (since it's exposed to ParentModule).
>> >> >>  Boz can
>> >> >> be
>> >> >> injected by anything, since it's available everywhere.
>> >> >>
>> >> >> sam
>> >> >>
>> >> >> On Thu, Oct 20, 2011 at 11:05 AM, nino martinez wael
>> >> >> <[email protected]> wrote:
>> >> >>>
>> >> >>> I have this setup
>> >> >>>
>> >> >>> InjectorA-ModuleA-InjectorB-ModuleB-InjectorC-ModuleC-Final
>> >> >>> injector
>> >> >>>
>> >> >>>  \----ModuleD--/
>> >> >>>
>> >> >>> On the B level there are multiple Modules which all are private
>> >> >>> however they possibly expose a interface that possible used in one
>> >> >>> of
>> >> >>> the multiple modules on layer C. However I get this message on the
>> >> >>> c
>> >> >>> level when it tries to inject the interface from B level:
>> >> >>>
>> >> >>>  Unable to create binding for
>> >> >>> com.netdesign.remedy.provider.RemedyWallboardDataProviderInterface.
>> >> >>> It
>> >> >>> was already configured on one or more child injectors or private
>> >> >>> modules
>> >> >>>
>> >> >>> will private module only expose to siblings or does it work on
>> >> >>> children
>> >> >>> aswell?
>> >> >>>
>> >> >>> regards Nino
>> >> >>>
>> >> >>> --
>> >> >>> 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.
>> >> >>>
>> >> >>
>> >> >> --
>> >> >> 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.
>> >> >>
>> >> >
>> >>
>> >> --
>> >> 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.
>> >>
>> >
>> > --
>> > 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.
>> >
>>
>> --
>> 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.
>>
>
> --
> 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.
>

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