Ok, so back to the original question. Why am I getting the exception that the binding could not be created .
"It was already configured on one or more child injectors or private" So thats when the modules are being booted. One of the submodules are getting this when it should be injected from the parent..? 2011/10/20 Sam Berlin <[email protected]>: > In that case, you'd just do what you're doing -- use > Injector.createChildInjector and build up your modules at runtime. They'd > behave effectively like PrivateModules (child bindings are cordoned off from > siblings or the parent), with the caveat that you can't expose things from > the child to the parent. You'd get the behavior where your child's module > can base its behavior on things bound in the parent module, because the > child module is being used at runtime instead of injector-creation-time. > sam > > On Thu, Oct 20, 2011 at 2:06 PM, nino martinez wael > <[email protected]> wrote: >> >> 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. >> > > -- > 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.
