Sorry, I misinterpreted your previous message. Are you sure myModule doesn't require an AirlineCache? That's the error you get when depending on a private binding from outside the PrivateModule that configured it. The error message should say what needed an AirlineCache, below what you posted.
On Thursday, 24 March 2016 10:40:17 UTC-4, Chris Kessel wrote: > > I'm curious why. "myModule" needs nothing from, and provides nothing to, > the airlinesModule. Why would it also need to be wrapped in a > PrivateModule? The only reason I'm wrapping airlineModule is because I have > a 3rd module I want to add which would have conflicts with airlineModule. > My first step was trying to get airlineModule to work as a PrivateModule > before adding in the complexity of the 3rd module. > > On Wednesday, March 23, 2016 at 6:57:11 PM UTC-7, Tavian Barnes wrote: >> >> You have to put both of them in PrivateModules, and export the things you >> need. >> >> On Wednesday, 23 March 2016 13:16:51 UTC-4, Chris Kessel wrote: >>> >>> I must be doing something wrong then. I'm using Dropwizard, which does >>> this behind the scenes: >>> injector = >>> injectorFactory.create(this.stage,ImmutableList.copyOf(this.modules)); >>> >>> I'm passing in that list of modules. >>> >>> This works: >>> Arrays.asList(myModule, airlineModule); >>> >>> This fails: >>> Arrays.asList( >>> myModule, >>> new PrivateModule() { >>> protected void configure() { >>> install(airlinesModule); >>> } >>> }); >>> >>> It fails with: >>> >>> 1) Unable to create binding for com.kessel.airlines.AirlineCache. It was >>> already configured on one or more child injectors or private modules >>> bound at com.kessel.airlines.AirlineModule.provideAirlineCache() >>> (via modules: com.kessel.MyMain$1 -> com.kessel.airlines.AirlineModule) >>> If it was in a PrivateModule, did you forget to expose the binding? >>> >>> However, the AirlineCache is provided in the AirlineModule. Why is >>> wrapping it in a PrivateModule causing this failure? >>> @Provides >>> @Singleton >>> public AirlineCache provideAirlineCache() { >>> ... >>> } >>> >>> On Tuesday, March 22, 2016 at 4:53:28 PM UTC-7, scl wrote: >>>> >>>> Private modules is the way to go. >>>> A binding in a private module can see all other bindings in the same >>>> private module and all bindings of all non private modules. >>>> >>>> >>>> >>>> On 22.03.2016 21:58, Chris Kessel wrote: >>>> >>>> I'm adding two Guice modules, but they both have an @Provides for the >>>> same item. They're both 3rd party modules, so I can't modify the code. How >>>> do I prevent the collision? I really need each module to use it's own >>>> provided version. I guess the equivalent of each living within it's own >>>> "scope" where it's provided items aren't visible to the other modules. >>>> >>>> Guice.createInjector(Stage.DEVELOPMENT, Arrays.asList(moduleA, >>>> moduleB)); >>>> >>>> I've tried wrapping them in a PrivateModule, but then they don't seem >>>> to even see their own @Provides...maybe I'm not understanding how to >>>> configure a PrivateModule? I'll actually want expose one specific class >>>> from each module to to my module that I'm developing, but my first step >>>> was >>>> trying to get these two other modules to coexist. >>>> >>>> The injector supports creation with multiple modules and it seems like >>>> provider collision would happen now and then, so presumably there's some >>>> way to deal with that I'm not groking... >>>> >>>> Thanks, >>>> Chris >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "google-guice" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to google-guice...@googlegroups.com. >>>> To post to this group, send email to google...@googlegroups.com. >>>> Visit this group at https://groups.google.com/group/google-guice. >>>> To view this discussion on the web visit >>>> <https://groups.google.com/d/msgid/google-guice/26e2e40f-3b26-4ec5-bd20-1c3a2f67fd1e%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> https://groups.google.com/d/msgid/google-guice/26e2e40f-3b26-4ec5-bd20-1c3a2f67fd1e%40googlegroups.com >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>>> >>>> -- You received this message because you are subscribed to the Google Groups "google-guice" group. To unsubscribe from this group and stop receiving emails from it, send an email to google-guice+unsubscr...@googlegroups.com. To post to this group, send email to google-guice@googlegroups.com. Visit this group at https://groups.google.com/group/google-guice. To view this discussion on the web visit https://groups.google.com/d/msgid/google-guice/83aab9a5-6533-4275-b813-159dc7e334dd%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.